Jackson非常适合在POJO和json字符串之间进行翻译。但是用它来操作json字符串会很痛苦。我发现自己做的事情如下:
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(ReadFile("testObj.json"));
((ObjectNode)node).put("testField", "newTestValue");
TestObject obj = mapper.readValue(mapper.writeValueAsString(node), TestObject.class);
这是一个简单的例子。如果要添加新对象或数组,则会变得更复杂。有更好的方法吗?
答案 0 :(得分:2)
我看不出有什么困难。如果您确定您的根JSON是JSON对象,只需将ObjectMapper#readTree(..)
返回的值强制转换为ObjectNode
并对其进行操作。
String json = "{\"sample\": \"some value\", \"nested\": {\"prop\": 123, \"nestedArray\":[1,2, \"string value\"], \"array\":[null, 42]}}";
ObjectNode node = (ObjectNode) new ObjectMapper().readTree(json);
System.out.println(node);
ArrayNode arrayNode = node.putArray("new array");
arrayNode.add(true).add(1).add("new value"); // chain add calls
arrayNode.addObject().put("nestedInArray", "nested object value"); // add an object and add to it
System.out.println(node);
打印
{"sample":"some value","nested":{"prop":123,"nestedArray":[1,2,"string value"],"array":[null,42]}}
{"sample":"some value","nested":{"prop":123,"nestedArray":[1,2,"string value"],"array":[null,42]},"new array":[true,1,"new value",{"nestedInArray":"nested object value"}]}
请注意,您也可以添加自定义对象。它们通常包含在POJONode
个对象中。