簡體   English   中英

在Java中使用Jackson將CSV轉換為JSON,如何制作嵌套對象?

[英]CSV to JSON with Jackson in java, how to make nested objects?

我想這樣解析csv文件

`labelA;labelB;label1C;label2C;
 val1;val2;val3;val4;`

變成這樣的JSON文件

[{
    "labelA" : "val1",
    "labelB" : "val2",
    "labelC" : "{
       "labelC1: : "val3"
       "labelC2: : "val4"
  }
}]

我該如何制作嵌套對象? 最好不要打pojo。 這是到目前為止我得到的代碼:

File input = new File(inputfile);
CsvSchema csvSchema=CsvSchema.emptySchema().withHeader().withColumnSeparator(';');
ObjectMapper csvMapper = new CsvMapper();
List entries = csvMapper.readerFor(Map.class).with(csvSchema).readValues(input).readAll();
ObjectMapper Csv2JsonMapper = new ObjectMapper();
Csv2JsonMapper.enable(SerializationFeature.INDENT_OUTPUT);
String json = Csv2JsonMapper.writeValueAsString(entries);

逐行讀取文件...

1)第一行被視為標題,並獨立處理。

2)一旦開始迭代值(從第2行開始),請用分隔符分隔該行。

3)將前兩個值存儲在JSONObject中。 { header0: value0, header1: value1 }

4)創建一個新的JSONObject來存儲其余的值,遍歷其余值並填充此對象。 { header2: value2, ... headerX: valueX }

5)將其存儲為原始對象的第三值。 { header0: value0, header1: value1, customHeader: <value from step 4> }

示例代碼-

    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = ";";
    boolean firstLine = true;
    List<String> headers = new ArrayList<>();
    JSONArray result = new JSONArray();
    try {

        br = new BufferedReader(new FileReader(<csvFilePath>));
        while ((line = br.readLine()) != null) {
            if (firstLine) {
                firstLine = false;
                String[] headersCSV = line.split(cvsSplitBy);

                for (String header : headersCSV) {
                    headers.add(header);
                }
            } else {
                String[] valuesCSV = line.split(cvsSplitBy);
                JSONObject valueObj = new JSONObject();

                // first 2 values are constant.
                valueObj.put(headers.get(0), valuesCSV[0]);
                valueObj.put(headers.get(1), valuesCSV[1]);

                JSONObject nestedObj = new JSONObject();
                for (int i = 2; i < valuesCSV.length; i++) {
                    nestedObj.put(headers.get(i), valuesCSV[i]);
                }

                valueObj.put("labelC", nestedObj);

                result.put(valueObj);
            }
        }

        // your output is in result Object. 


    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM