java - 将现有数组中的嵌套数组添加到 json 文件中
问题描述
尝试将嵌套数组添加到JSON
.
public SecondArray createOrUpdate(SecondArray object) {
try {
ObjectMapper mapper = new ObjectMapper();
ObjectNode root = (ObjectNode) mapper.readTree(jsonFile);
ObjectNode newArrayElement = new ObjectNode(mapper.getNodeFactory());
ObjectNode newItem = new ObjectNode(mapper.getNodeFactory());
ArrayNode secondArr = (ArrayNode) root.get("secondArray");
newArrayElement.put("number", object.getNumber());
newArrayElement.put("data", object.getData);
for (SecondArray.Item items: object.getItems()) {
newItem.put("item1", items.getItem1));
newItem.put("item2", items.getItem2);
}
secondArr.add(mapper.convertValue(newArrayElement, JsonNode.class));
return object;
} catch (IOException e) {
e.printStackTrace();
}
}
有这个输入JSON
:
{
"firstArray":[
{
"data1":1,
"data2":"DATA"
},
{
"data1":2,
"data2":"DATA2"
}
],
"secondArray":[
{
"number":1,
"data":"DATA3",
"items":[
{
"item1":"sword",
"item2":"mace"
},
{
"item1":"dagger",
"item2":"axe"
}
]
}
]
}
需要将新对象添加到secondArray
具有相同属性的现有对象中。目前我得到这样的东西:
{
"firstArray":[
{
"data1":1,
"data2":"DATA"
},
{
"data1":2,
"data2":"DATA2"
}
],
"secondArray":[
{
"number":1,
"data":"DATA3",
"items":[
{
"item1":"sword",
"item2":"mace"
},
{
"item1":"dagger",
"item2":"axe"
}
}
],
{
"number":2,
"data":"DATA4",
"items":[
{
"item1":"NEWITEM3",
"item2":"NEWITEM4"
}
]
}
}
]
}
如何让我的代码添加newArrayElement
到secondArray
其中newArrayElement
至少有 2 个newItems
数组newArrayelement
?
解决方案
您需要newItem
为每个Item
集合创建。另外,请记住在最后将其添加到数组中。您可以在下面找到示例,对于给定的JSON
有效负载添加新的item
:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.File;
import java.util.Arrays;
import java.util.List;
public class JsonApp {
public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
SecondArray secondArray = new SecondArray();
ObjectNode root = (ObjectNode) mapper.readTree(jsonFile);
ArrayNode array = (ArrayNode) root.get("secondArray");
// create new item
ObjectNode newObject = mapper.createObjectNode();
newObject.put("number", 2);
newObject.put("data", "DATA4");
// new array for items
ArrayNode items = mapper.createArrayNode();
for (SecondArray.Item item : secondArray.getItems()) {
// new item
ObjectNode newItem = mapper.createObjectNode();
newItem.put("item1", item.getItem1());
newItem.put("item2", item.getItem2());
// add item to array
items.add(newItem);
}
// add array to new object
newObject.set("items", items);
// add created object to secondArray
array.add(newObject);
System.out.println(mapper.writeValueAsString(root));
}
}
推荐阅读
- ios - 从 iOS 应用程序以编程方式运行 XCTests
- python - Why I'm getting an error while creating a new model class in django?
- c# - CSVHelper:更改标题/列的名称并添加额外的标题/列
- c++ - 我无法理解 c 风格转换(例如:- A a;B *b;b = (*B) (&a);) 和 dynamic_cast 之间的区别(&一个);
- javascript - Javascript cookie 退出 - 我如何验证它是否有效?
- ocr - Google Cloud Vision API PDF 文本提取
- android - 从 Android 的 web 视图访问外部 USB 摄像头
- java - 尝试通过 http 调用服务时出现异常
- python - 不支持重定向
- c++ - 如何将多维char数组复制到char *