使用 Jackson 库编辑 JsonArray
Editing JsonArray using Jackson library
我的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"
}
我正在使用 Jackson 库。我想编辑比方说元素 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 节点包含数据列表。我们如何编辑一个数组类型的节点。
如果我们不能使用 jackson 实现这个,那么有没有其他库可以解决这个问题?
我尝试了以下链接
and How to retrieve and update json array element without traversing entire json
但并没有取得多大的成就
你没有完全使用 jackson 库。
<YOur pojo object> mypojo =objectMapper.readValue(jsonData, <yourpojo.class>);
现在您可以使用 getter setter
如果我没记错的话,您想修改 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);
}
我的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"
}
我正在使用 Jackson 库。我想编辑比方说元素 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 节点包含数据列表。我们如何编辑一个数组类型的节点。
如果我们不能使用 jackson 实现这个,那么有没有其他库可以解决这个问题?
我尝试了以下链接
你没有完全使用 jackson 库。
<YOur pojo object> mypojo =objectMapper.readValue(jsonData, <yourpojo.class>);
现在您可以使用 getter setter
如果我没记错的话,您想修改 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);
}