Как добавить атрибут в любом месте в JSON, используя JsonObject в Java

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

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

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

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

3 ответа

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

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

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

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

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

Вот код

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());
Другие вопросы по тегам