如何在java中创建复杂的json对象?
我正在尝试用java创建这个json对象,并且:如何在java中创建复杂的json对象?,java,json,jackson,Java,Json,Jackson,我正在尝试用java创建这个json对象,并且: { "notification": { "message": "test", "sound": "sounds/alarmsound.wav", "target": { "apps": [ { "id": "app_id", "platforms": [
{
"notification": {
"message": "test",
"sound": "sounds/alarmsound.wav",
"target": {
"apps": [
{
"id": "app_id",
"platforms": [
"ios"
]
}
]
}
},
"access_token": "access_token"
}
如果有人能在java中创建它,我们将不胜感激 这里有各种各样的库可以帮助您
- 谷歌GSON-
- 杰克逊-
- Groovy的JsonSlurper-
如果您在这些库中遇到了更具体的问题,您应该发布它们。如果您真的想创建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
生成的节点
是一个ObjectNode
,它继承了JsonNode
,这意味着您可以获得JsonNode
的所有细节:
- 合理的
表示李>.toString()
- 导航功能(
,.get()
——GSON在这方面没有等效功能,尤其不是.path()
,因为它无法对缺少的节点建模)李>.path()
表示不存在的节点,MissingNode
表示JSON null,所有这些都继承了NullNode
(GSON对此没有等价物——所有JsonNode
的导航方法也可以在这些节点上使用)李>JsonNode
- 当然还有
/.equals()
.hashCode()
- 我宁愿创建表示该对象的类,并将其转换为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。感谢@fge,他为我提供了解决此问题的必要信息 下面是我为解决这个问题所做的 JsonNodeFactory nodeFactory=新的JsonNodeFactory() 打印pushContent然后输出我需要创建的确切json对象 希望这对其他人也有帮助
Rich对于那些试图使用此线程答案的人,请注意
JsonNodeFactory nodeFactory = new JsonNodeFactory();
不再使用jackson数据绑定包。相反,你应该这样做
final JsonNodeFactory nodeFactory = JsonNodeFactory.instance;
看到这个答案:作为一个想要回到Java的人,我偶然发现了这个问题:我应该认为这不值得我花时间吗?(我还没有开始在Java中使用JSON,只是以后再考虑。)杰夫,谢谢你的回复。我已经调查过杰克逊,并试图实施它。但是,我通常不是java开发人员,无法理解过程。@sigmavirus24我没有使用crockford库。@pixelworlds您遇到了什么问题?“我无法理解这个过程”并不能帮助人们帮助你。@Srinivas谷歌搜索可以帮助你。只需搜索jackson vs json或任何您想要比较的内容。简短回答:使用jackson。GSON很好,但在导航方面,Jackson遥遥领先;JsonNode rootNode=mapper.createObjectNode();((ObjectNode)rootNode.put(“name”,“Tatu”);-但是,我还没有弄清楚如何嵌套其他对象和数组。这非常有用!我将尝试实现这一点,看看它是如何进行的!再次感谢您的时间和帮助!很高兴它有帮助!请注意,
ObjectMapper
实际上并不用于创建节点,它的主要用途实际上是序列化和反序列化。在内部,它使用了一个JsonNodeFactory
。我通常是一个javascript/PHP开发人员,所以这个java项目让我非常沮丧!我真的很感激你的好意!是的,与JavaScript和PHP不同,Java没有用于映射的本机类型——但与这两种语言不同,它实际上可以用更强大的方式表示它们,并且可以提高类型安全性!一个不同的世界…你的解决方案非常有效!我为其他人发布了我的实现!再次感谢你!下一次最好添加一些解释,而不仅仅是dump code.IMHO当代码清晰、自解释且直观时,就不需要以解释的名义添加冗长的额外文本行。让ans简短明了。@Dexter代码不会对每个人都是自我直觉的。你是对的@Rishi,但在这个例子中,一个程序员问了一个与代码相关的问题。另一个编码员用一些代码回答。你看过上面的代码了吗?它非常简单和直观。因此,我不认为需要额外的解释。
JsonNodeFactory nodeFactory = new JsonNodeFactory();
final JsonNodeFactory nodeFactory = JsonNodeFactory.instance;