使用Jackson库编辑JsonArray

时间:2018-04-05 10:58:21

标签: java json jackson jackson-databind

我的Json是这样的

{
  "A1":"1234",
  "A2": "123",   
  "A3": "???",
  "A4": "object, may not be populated.",
  "A5": { },
  "A6": { },
  "A7":{
    "B1": ["100"],
    "B2": ["C"],
    "B3": ["O", "A"]
},
  "A8":{
      "B4":["D1"],
      "B5":["D2"],
      "B6":["D3"],
      "B7":["D4"],
      "B8":["D5"],
      "B9":["D6"],
      "B10":["123"]
    }
  "ignoreThisField": "it is useless"
}

我正在使用杰克逊图书馆。我想编辑让我们说元素B4,它位于A8内部并且是数组类型。  我试过下面的代码

    byte[] jsonData = readJson(JsonFilePath);

    // Convert json String to object

    POJOClass pojo= getValue(jsonData, POJO.class);

    objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true)
            .configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, true);

    JsonNode rootNode = objectMapper.readTree(jsonData);
    // ((ObjectNode) rootNode).put("B4", "A" + "Somedata");

但它给我的输出为

"B4":"[Somedata]"

而不是

"B4":["Somedata"]

导致意外结果。
B4节点包含数据列表。我们如何编辑一个类型为array的节点。 如果我们无法使用jackson实现这一点,那么还有其他任何可以解决问题的库吗? 我试过下面的链接
Modify JsonNode of unknown JSON dynamically in JavaHow to retrieve and update json array element without traversing entire json  但是无法从中获得很多成就

2 个答案:

答案 0 :(得分:1)

如果我没错,你想修改JSON数据中存在的B4对象。要正确地执行此操作,您应该使用以下代码。

        JsonNode node = rootNode.get("A8");
        List<String>list = new ArrayList<String>();//create a ArrayList
        list.add("Anything"); //add data to arraylist 
        ArrayNode arrayNode = ((ObjectNode)node).putArray("B4"); //add the arraydata into the JSONData
        for (String item : list) { //this loop will add the arrayelements one by one.
            arrayNode.add(item);
        }

答案 1 :(得分:0)

你没有完全使用jackson lib。

<YOur pojo object> mypojo =objectMapper.readValue(jsonData, <yourpojo.class>);

现在你可以使用getter setter