我的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 Java和How to retrieve and update json array element without traversing entire json
但是无法从中获得很多成就
答案 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