Java Jackson之上的Json操作

Java Jackson之上的Json操作,java,json,jackson,Java,Json,Jackson,Jackson非常适合在POJO和json字符串之间进行转换。但是使用它来操作json字符串是一件痛苦的事情。我发现自己在做这样的事情: ObjectMapper mapper = new ObjectMapper(); JsonNode node = mapper.readTree(ReadFile("testObj.json")); ((ObjectNode)node).put("testField", "newTestValue"); TestObject obj = mapper.rea

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);

这是一个简单的例子。如果你想添加一个新的对象或一系列的东西,它会变得更复杂。有更好的方法吗?

我不知道有什么困难。如果确定根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
对象中。

您所做的一切都很好。如果有任何问题,请将
node
的声明类型设置为
ObjectNode
,如果您知道它是JSON对象,则强制转换
readTree
的返回值。看起来您想更改输入JSON,然后将其反序列化到您的POJO类,不是吗?