Как создать сложный json-объект в java? - программирование

Как создать сложный json-объект в java?

Я пытаюсь создать этот json-объект в java и борется:

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

Любая помощь в том, как кто-то создаст это в java, будет оценен!

4b9b3361

Ответ 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-объекта, который мне нужно создать!

Надеюсь, это тоже поможет кому-то еще!

Рич