Как добавить атрибут в любом месте в 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());