我正在尝试在java中创建这个json对象并且苦苦挣扎:
{
"notification": {
"message": "test",
"sound": "sounds/alarmsound.wav",
"target": {
"apps": [
{
"id": "app_id",
"platforms": [
"ios"
]
}
]
}
},
"access_token": "access_token"
}
任何人如何在java中创建它的帮助将不胜感激!
答案 0 :(得分:41)
如果你真的在研究创建 JSON对象,杰克逊有你想要的一切:
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()
,因为它无法为缺少的节点建模;)MissingNode
表示不存在的节点,NullNode
表示JSON null,所有节点都继承JsonNode
(GSON没有相应的 - 并且全部JsonNode
的导航方法也可在此类节点上使用); .equals()
/ .hashCode()
。答案 1 :(得分:23)
对于那些尝试使用此主题的答案的人,请注意
JsonNodeFactory nodeFactory = new JsonNodeFactory();
使用包jackson-databind不再工作了。相反,你应该做
final JsonNodeFactory nodeFactory = JsonNodeFactory.instance;
答案 2 :(得分:8)
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);
答案 3 :(得分:3)
感谢@fge为我提供了解决此问题的必要信息。
这就是我为解决这个问题所做的一切!
JsonNodeFactory nodeFactory = new 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对象!
希望这也可以帮助其他人!
富
答案 4 :(得分:2)
我宁愿创建表示该对象的类,并将其转换为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;
}
然后使用您喜欢的任何lib /框架将填充的ToJson对象转换为JSON。
答案 5 :(得分:0)
有很多图书馆可以帮到你。
如果您遇到这些库的更具体问题,您应该发布它们。