【问题标题】:Convert CSV data into nested json objects using java library使用 java 库将 CSV 数据转换为嵌套的 json 对象
【发布时间】:2018-08-17 08:09:56
【问题描述】:

我正在搜索可以转换包含嵌套对象(如:address.city、address.country)的 csv 数据的 java 库,以相应地转换为带有嵌套对象的 json 数据。 下面是我正在使用的java代码:

File input = new File("input.csv");
File output = new File("output.json");

CsvSchema csvSchema = CsvSchema.builder()
.setUseHeader(true).build();
    CsvMapper csvMapper = new CsvMapper();

    // Read data from CSV file
    List<Object> readAll = csvMapper.readerFor(Map.class).with(csvSchema).readValues(input).readAll();
    System.out.println(readAll);
    ObjectMapper mapper = new ObjectMapper();

    // Write JSON formated data to output.json file
    mapper.writerWithDefaultPrettyPrinter().writeValue(output, readAll);

    // Write JSON formated data to stdout
    System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(readAll));

这是我得到的输出:

[ {
 "studentName" : "Foo",
 "Age" : "12",
 "address__city" : "newyork",
 "address__address1" : "North avenue",
 "address__zipcode" : "123213",
 "subjects__name" : "English",
 "subjects__marks" : "40"
  }, {
 "studentName" : "ABcd",
 "Age" : "25",
 "address__city" : "achi",
 "address__address1" : "Morh",
 "address__zipcode" : "27400",
 "subjects__name" : "History",
 "subjects__marks" : "50"
 } ]

这是预期的输出:

{
"studentName": "Foo",
"Age": "12",
"address":{
    "city" : "newyork",
    "address1": "North avenue",
    "zipcode" : "123213"
},
"subjects": [
    {
        "name": "English",
        "marks": "40"
    },
    {
        "name": "History",
        "marks": "50"
    }
]
}

这是输入 csv:

"studentName","Age","address__city","address__address1","address__zipcode","subjects__name","subjects__marks"
"Foo","12","newyork","North avenue","123213","English","40"
"","25","achi","Morh","2400","History","

【问题讨论】:

标签: json csv


【解决方案1】:

看起来univocity-parsers 可以通过其@Nested 注释在CSV 端完成您需要的操作。

虽然读/写 JSON 是行不通的。所以我的建议是使用单义解析器将您的 CSV 解析为您需要的对象结构,然后 Jackson 将该对象结构写入 JSON。

希望这会有所帮助。 披露:我是单义词解析器的作者。它是开源和免费的(Apache 2.0 许可证)

【讨论】:

  • 你能帮我解决这个问题吗...?
  • @Jeronimo Backes,univocity 解析器能否在上述示例中使用嵌套注释创建主题数组?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2021-06-22
  • 1970-01-01
  • 2017-07-27
相关资源
最近更新 更多