22

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

{
    "notification": {
        "message": "test",
        "sound": "sounds/alarmsound.wav",
        "target": {
            "apps": [
                {
                    "id": "app_id",
                    "platforms": [
                        "ios"
                    ]
                }
            ]
        }
    },
    "access_token": "access_token"
}

任何人如何在java中创建它的帮助将不胜感激!

4

6 回答 6

44

如果你真的想创建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(),因为它无法对丢失的节点进行建模);
  • MissingNode表示一个不存在的节点,并NullNode表示 JSON null,所有这些都继承JsonNode(GSON 没有对应的 - 并且所有JsonNode的导航方法在这些节点上可用);
  • 当然.equals()/ .hashCode()
于 2013-01-08T04:27:52.467 回答
24

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

JsonNodeFactory nodeFactory = new JsonNodeFactory();

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

final JsonNodeFactory nodeFactory = JsonNodeFactory.instance;

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

于 2015-06-29T09:59:53.633 回答
10
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);
于 2013-12-02T18:03:55.167 回答
5

感谢@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 对象!

希望这对其他人也有帮助!

富有的

于 2013-01-08T08:24:26.377 回答
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;
}

然后,您使用您喜欢的任何库/框架将填充的 ToJson 对象转换为 JSON。

于 2013-01-08T05:37:21.567 回答
0

有各种各样的库可以在这里为您提供帮助。

如果您在使用这些库时遇到更具体的问题,您应该发布它们。

于 2013-01-08T04:21:53.483 回答