如何在java中创建复杂的json对象?

2022-09-02 00:01:32

我试图在java中创建这个json对象并挣扎:

{
    "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

结果是一个 ,它继承了 ,这意味着你得到了所有的细节:nodeObjectNodeJsonNodeJsonNode

  • 合理的表现形式;.toString()
  • 导航功能(, -- GSON 没有等效项,特别是没有 ,因为它无法对缺少的节点进行建模);.get().path().path()
  • MissingNode表示不存在的节点,并表示JSON null,所有这些都是继承的(GSON没有等效的 - 并且所有'的导航方法在此类节点上可用);NullNodeJsonNodeJsonNode
  • 当然,还有 /。.equals().hashCode()

答案 2

对于那些尝试使用此线程的答案的人,请注意

JsonNodeFactory nodeFactory = new JsonNodeFactory();

不再使用包 jackson-databind。相反,你应该这样做

final JsonNodeFactory nodeFactory = JsonNodeFactory.instance;

看到这个答案:https://stackoverflow.com/a/16974850/3824918