Как добавить атрибут в любом месте в JSON, используя JsonObject в Java - PullRequest
0 голосов
/ 27 июня 2018

У меня есть JSON. Скажем:

{
 "id":"101",
 "name":"Saurabh",
 "age":"28"
}

Теперь я хочу добавить «rollNo»: «52» сразу после атрибута id. Как я могу сделать это, используя jsonNode в Java?

На самом деле я анализирую этот объект с помощью jsonNode, поэтому нет отображения pojo Я просто хочу, чтобы способ добавить атрибут в любом месте с созданием отображения Pojo.

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Свойства JSON не упорядочены. Вы не можете решить поставить один «сразу после» другого. Они будут в том порядке, в котором они будут.

Ну, это так. Если вы используете потоковый JSON Writer от Jackson, вы можете использовать его для записи свойств в нужном вам порядке. Но это прыгает через обручи, просто чтобы сделать то, что вы не должны делать в первую очередь. Когда вы хотите, чтобы вещи были в определенном порядке, поместите их в массивы.

0 голосов
/ 10 июля 2018

Я действительно нашел способ сделать это.

Сначала создайте новый пустой узел, затем выполните итерации по исходному узлу, проверьте свое состояние и поместите новый узел соответствующим образом. Это может занять лишь небольшую часть времени, но решит подобные проблемы.

Вот код

ObjectNode newChildNode = new ObjectNode(JsonNodeFactory.instance);
Iterator<Map.Entry<String, JsonNode>> fields = childNode.fields();
while(fields.hasNext()){
    Map.Entry<String, JsonNode> entry = fields.next();
    newChildNode.putPOJO(entry.getKey(), entry.getValue());
    if("id".equals(entry.getKey())){
        newChildNode.put("rollNo", "52");
    }
}

//This will convert the POJO Node again to JSON node
ObjectMapper mapper = new ObjectMapper();
newChildNode= mapper.readTree(newChildNode.toString());
0 голосов
/ 27 июня 2018

JsonNode равен immutable и предназначен для операции разбора. Однако его можно привести в ObjectNode и добавить значение ((ObjectNode)jsonNode).put("rollNo", "52");

...