java - 将对象添加到 json 文件中的对象的 JsonArray
问题描述
这是我的JSON
有效负载,我需要将更多对象添加到firstArray
.
{
"firstArray": [{
"data1": 1,
"data2": "DATA"
}, {
"data1": 2,
"data2": "DATA2"
}],
"secondArray": [{
"number": 1,
"data": "DATA3",
}, {
"number": 2,
"data": "DATA4"
}],
"thirdArray": [{
"something": 1,
"thatthing": "DATA5"
}, {
"something": 2,
"thatthing": "DATA6"
}]
}
这是我读取上述有效负载的方法:
public FirstArray createFirstArray(FirstArray object) {
try {
JsonNode jsonNode = mapper.readTree(new File(filePath));
ObjectNode objectNode = mapper.getNodeFactory().objectNode();
objectNode.putPOJO("firstArray", jsonNode.get("firstArray"));
objectNode.put("data1", object.getData1());
objectNode.put("data2", object.getData2());
System.out.println(objectNode.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
它返回这个:
{
"firstArray":[
{
"data1":1,
"data2":"DATA"
},
{
"data1":2 "data2":"DATA2"
}
],
"data1":123,
"data2":"randomDATA"
}
我需要将数组中的数据作为最后一个不分开的对象,我该怎么做?
解决方案
您需要存储根节点。在您的示例打印jsonNode
变量中。下面的例子做同样的事情:
import com.fasterxml.jackson.databind.JsonNode;
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;
public class Json {
public static void main(String[] args) throws Exception {
File jsonFile = new File("test.json");
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
ObjectNode root = (ObjectNode) mapper.readTree(jsonFile);
// create new node item
ObjectNode newNode = new ObjectNode(mapper.getNodeFactory());
newNode.put("data1", 3);
newNode.put("data2", "DATA3");
// create new class item
FirstItem newItem = new FirstItem(4, "DATA4");
// get array node
ArrayNode firstArray = (ArrayNode) root.get("firstArray");
// add new ObjectNode
firstArray.add(newNode);
// add new POJO
firstArray.add(mapper.convertValue(newItem, JsonNode.class));
// serialise root
System.out.println(mapper.writeValueAsString(root));
}
}
class FirstItem {
private int data1;
private String data2;
public FirstItem(int data1, String data2) {
this.data1 = data1;
this.data2 = data2;
}
public int getData1() {
return data1;
}
public String getData2() {
return data2;
}
}
上面的代码打印:
{
"firstArray" : [ {
"data1" : 1,
"data2" : "DATA"
}, {
"data1" : 2,
"data2" : "DATA2"
}, {
"data1" : 3,
"data2" : "DATA3"
}, {
"data1" : 4,
"data2" : "DATA4"
} ],
"secondArray" : [ {
"number" : 1,
"data" : "DATA3"
}, {
"number" : 2,
"data" : "DATA4"
} ],
"thirdArray" : [ {
"something" : 1,
"thatthing" : "DATA5"
}, {
"something" : 2,
"thatthing" : "DATA6"
} ]
}
推荐阅读
- python-3.x - 为什么我在 Python 中使用 Pathlib 时会收到非法指令 4?
- java - 对于 Apache NetBeans IDE 11.2,如何将其指向我的 Fedora Linux 系统上的正确 JDK 版本?
- php - 将删除按钮添加到表类
- node.js - 无法在 node.js 中设置标头
- javascript - 如何对文档实施黑白滤镜
- fortran - Fortran 代码在 HPC 上使用 mpi_send 时冻结,但在我的笔记本电脑上没有
- flutter-packages - 如何在flutter pub publish中登录/注销?
- java - 从服务器正确解析数据但 Android recyclerview 为空
- angular - 内容在弹性布局角度中没有响应
- weblogic - java独立客户端将war文件部署到weblogic 14.1.1