Как создать сложный json-объект в java?
Я пытаюсь создать этот json-объект в java и борется:
{
"notification": {
"message": "test",
"sound": "sounds/alarmsound.wav",
"target": {
"apps": [
{
"id": "app_id",
"platforms": [
"ios"
]
}
]
}
},
"access_token": "access_token"
}
Любая помощь в том, как кто-то создаст это в java, будет оценен!
Ответы
Ответ 1
Если вы действительно занимаетесь созданием объектов JSON, у Jackson есть все, что вы хотите:
final JsonNodeFactory factory = JsonNodeFactory.instance;
final ObjectNode node = factory.objectNode();
final ObjectNode child = factory.objectNode(); // the child
child.put("message", "test");
// etc etc
// and then:
node.set("notification", child); // node.put(String, ObjectNode) has been deprecated
Результирующий node
является ObjectNode
, который наследует JsonNode
, что означает, что вы получаете все JsonNode
тонкости:
- разумное представление
.toString()
;
- возможности навигации (
.get()
, .path()
- GSON не имеет эквивалента для этого, в частности, не .path()
, поскольку он не может моделировать node, который отсутствует);
-
MissingNode
для представления node, которого там нет, и NullNode
для представления JSON null, все из которых наследуют JsonNode
(для GSON нет эквивалента - и вся система навигации JsonNode
методы также доступны на таких узлах);
- и, конечно,
.equals()
/.hashCode()
.
Ответ 2
Для тех, кто пытается использовать ответы этого потока, обратите внимание, что
JsonNodeFactory nodeFactory = new JsonNodeFactory();
Больше не работает с пакетом jackson-databind. Вместо этого вы должны сделать
final JsonNodeFactory nodeFactory = JsonNodeFactory.instance;
Смотрите этот ответ: fooobar.com/questions/261673/...
Ответ 3
JSONObject jsonComplex = new JSONObject();
JSONObject notification = new JSONObject();
notification.put("message", "test");
notification.put("sound", "sounds_alarmsound.wav");
JSONObject targetJsonObject= new JSONObject();
JSONArray targetJsonArray= new JSONArray();
JSONObject appsJsonObject= new JSONObject();
appsJsonObject.put("id","app_id");
JSONArray platformArray = new JSONArray();
platformArray.add("ios");
appsJsonObject.put("platforms",platformArray);
targetJsonArray.add(appsJsonObject);
targetJsonObject.put("apps", targetJsonArray);
notification.put("target", targetJsonObject);
jsonComplex.put("notification", notification);
jsonComplex.put("access_token", "access_token");
System.out.println(jsonComplex);
Ответ 4
Я предпочел бы создавать классы, представляющие этот объект, и преобразовывать их в JSON. Я предполагаю, что вы получили этот JSON-интерфейс в другом месте и много о том, как его создать с Java.
class ToJson{
private Notification notification;
private String access_token;
}
public class Notification{
private String message;
private String sound;
private Target target;
}
public class Target{
private Apps apps[];
}
public class Apps{
private String id;
private Plataform plataforms[];
}
public class Plataform{
privte String ios;
}
Затем вы конвертируете заполненный объект ToJson в JSON с помощью любой библиотеки lib/framework, которая вам нравится.
Ответ 5
Спасибо, @fge, который предоставил мне необходимую информацию для решения этой проблемы.
Вот что я сделал, чтобы решить эту проблему!
JsonNodeFactory nodeFactory = новый JsonNodeFactory();
ObjectNode pushContent = nodeFactory.objectNode();
ObjectNode notification = nodeFactory.objectNode();
ObjectNode appsObj = nodeFactory.objectNode();
ObjectNode target = nodeFactory.objectNode();
ArrayNode apps = nodeFactory.arrayNode();
ArrayNode platforms = nodeFactory.arrayNode();
platforms.add("ios");
appsObj.put("id","app_id");
appsObj.put("platforms",platforms);
apps.add(appsObj);
notification.put("message",filledForm.field("text").value());
notification.put("sound","sounds/alarmsound.wav");
notification.put("target", target);
target.put("apps",apps);
pushContent.put("notification", notification);
pushContent.put("access_token","access_token");
if(!filledForm.field("usage").value().isEmpty()) {
target.put("usage",filledForm.field("usage").value());
}
if(!filledForm.field("latitude").value().isEmpty() && !filledForm.field("longitude").value().isEmpty() && !filledForm.field("radius").value().isEmpty()) {
target.put("latitude",filledForm.field("latitude").value());
target.put("longitude",filledForm.field("longitude").value());
target.put("radius",filledForm.field("radius").value());
}
Печать pushContent, чем вывод точного json-объекта, который мне нужно создать!
Надеюсь, это тоже поможет кому-то еще!
Рич
Ответ 6
Существует множество библиотек, которые могут вам помочь.
Если у вас возникли проблемы с этими библиотеками, вы должны опубликовать их.