java - 使用 Java 和 Jackson 将数组写入 JSON

标签 java json jackson

我需要通过读取 csv 来创建一个如下所示的 JSON 结构。

[
  {
    "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
    }]
}]

关于java - 使用 Java 和 Jackson 将数组写入 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58734479/

相关文章:

java - 不同组的不同子布局 ExpandableListView

javascript - 创建 Json 以适应结构

java - 确保经过身份验证的用户只能更新自己的记录

java - 使用 Jackson 进行 boolean 和数组数据绑定(bind)

java - 我的程序不会从另一个类更新 TextView ,它每次都会退出,我不知道为什么?

java - log4j2 文件已创建但未写入

java - 绑定(bind)到 LocalDate 的 Spring 表单控件默认为现在

Java - 如何对java对象进行Gzip压缩

android - 如何在微调器中设置初始文本而不是 json 响应的第一项

java - Spark 和 Elastic 导致 jackson 重叠