杰森操纵杰克逊

时间:2014-01-09 16:57:30

标签: 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.readValue(mapper.writeValueAsString(node), TestObject.class);

这是一个简单的例子。如果要添加新对象或数组,则会变得更复杂。有更好的方法吗?

1 个答案:

答案 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个对象中。