【问题标题】:Json manipulation on top of Jackson杰克逊之上的 Json 操作
【发布时间】:2014-01-09 16:57:29
【问题描述】:

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

这是一个简单的例子。如果您想添加一个新对象或一组事物,它会变得更加复杂。有没有更好的方法来做到这一点?

【问题讨论】:

  • 你在做什么就好了。如果有的话,将node 的声明类型设置为ObjectNode,如果你知道它是一个JSON 对象,则将readTree 的返回值强制转换。
  • 看起来您想更改输入 JSON,然后将其反序列化为您的 POJO 类,不是吗?

标签: java json jackson


【解决方案1】:

我看不出有什么难的。如果您确定您的根 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 对象中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2018-08-10
    • 1970-01-01
    相关资源
    最近更新 更多