使用Java和Jackson将数组写入JSON
我需要通过从csv读取来创建一个类似这样的JSON结构使用Java和Jackson将数组写入JSON,java,json,jackson,Java,Json,Jackson,我需要通过从csv读取来创建一个类似这样的JSON结构 [ { "firstName": "John", "lastName": "Smith", "udas": [ { "name": "UDF1", "dataType": "number", "value": 0 } ] } ] 我得到的结构是 [{ "firstName": "Michael", "lastNa
[
{
"firstName": "John",
"lastName": "Smith",
"udas": [
{
"name": "UDF1",
"dataType": "number",
"value": 0
}
]
}
]
我得到的结构是
[{
"firstName": "Michael",
"lastName": "Dodd"
}, {
"udas": [{
"name": "UDF1",
"dataType": "number",
"entityCode": 0
}]
}]
读取文件没有问题,但是格式化JSON是一个问题。如何去掉“udas”数组周围多余的花括号
这是我正在使用的代码
public class MyTestClass {
public static void main(String[] args) {
String row;
String[] data = {};
ObjectMapper objectMapper = new ObjectMapper();
try {
BufferedReader csvReader = new BufferedReader(new FileReader("res/mydata.csv"));
row = csvReader.readLine();
data = row.split(",");
csvReader.close();
} catch (IOException e) {
e.printStackTrace();
}
ArrayNode arrayNode = objectMapper.createArrayNode();
ObjectNode personObjectNode = objectMapper.createObjectNode();
personObjectNode.put("firstName", data[0]);
personObjectNode.put("lastName", data[1]);
arrayNode.add(personObjectNode);
ArrayNode udaArrayNode = objectMapper.createArrayNode();
ObjectNode approvalAuthorityObjectNode = objectMapper.createObjectNode();
approvalAuthorityObjectNode.put("name", "UDF1");
approvalAuthorityObjectNode.put("dataType", "number");
approvalAuthorityObjectNode.put("entityCode", Integer.parseInt(data[15]));
udaArrayNode.add(approvalAuthorityObjectNode);
ObjectNode udaObjectNode = objectMapper.createObjectNode();
udaObjectNode.putPOJO("udas", udaArrayNode);
arrayNode.add(udaObjectNode);
System.out.println(arrayNode.toString());
}
}
以下更改修复了该问题。谢谢,@SotiriosDelimanolis
public class MyTestClass{
public static void main(String[] args) {
String row;
String[] data = {};
ObjectMapper objectMapper = new ObjectMapper();
try {
BufferedReader csvReader = new BufferedReader(new FileReader("res/mydata.csv"));
row = csvReader.readLine();
data = row.split(",");
csvReader.close();
} catch (IOException e) {
e.printStackTrace();
}
ArrayNode arrayNode = objectMapper.createArrayNode();
ObjectNode personObjectNode = objectMapper.createObjectNode();
personObjectNode.put("firstName", data[0]);
personObjectNode.put("lastName", data[1]);
arrayNode.add(personObjectNode);
ArrayNode udaArrayNode = objectMapper.createArrayNode();
ObjectNode approvalAuthorityObjectNode = objectMapper.createObjectNode();
approvalAuthorityObjectNode.put("name", "UDF1");
approvalAuthorityObjectNode.put("dataType", "number");
approvalAuthorityObjectNode.put("entityCode", Integer.parseInt(data[15]));
udaArrayNode.add(approvalAuthorityObjectNode);
personObjectNode.putPOJO("udas", udaArrayNode);
System.out.println(arrayNode.toString());
}
}
现在我得到了JSON
[{
"firstName": "Michael",
"lastName": "Dodd",
"udas": [{
"name": "UDF1",
"dataType": "number",
"entityCode": 0
}]
}]
为什么要将
uda
添加到新的ObjectNode
,并将其添加到arrayNode
?您应该将其添加到PersonObject节点
。我不确定是否遵循了此操作。是ObjectNode UDAOObjectNode=objectMapper.createObjectNode()代码>您所指的语句?如果我更改arrayNode.add(udaObjectNode)
到arrayNode.add(udaObjectNode)代码>我得到了一个JSON,它只复制了第一部分[{“firstName”:“Michael”,“lastName”:“Dodd”},{“firstName”:“Michael”,“lastName”:“Dodd”}]
。去掉代码的整个udaObjectNode
部分,只需personObjectNode.putPOJO(“udas”,udaArrayNode)代码>。