0

我正在比较两个 json 对象,其中一个从 csv 文件获取请求和其他输入——用于 csv 到 json 逻辑——以下代码,

csv 文件看起来像这样 ---- csv 文件看起来像这样 -

sw product,sw product module,technology
Product 1,Module 1,REGULAR
Product 1,Module 2,SPRING CLOUD
Product 2,Module 1,REGULAR
Product 2,Module 3,REGULAR

JAVA代码

package com.beandependencyinjection.configurationbeans.service;

public class ConvertCsvToJson {
    public static void main(String[] args)  {

        String filesss = "C:\products\\swproduct.csv";
        ConvertCsvToJson result = new ConvertCsvToJson();

        System.out.println(result.CSVtoJSON(filesss));


    }

    public String CSVtoJSON(String output) {

            String[] lines = output.split(",");

            StringBuilder builder = new StringBuilder();
            builder.append('[');
            String[] headers = new String[0];

            //CSV TO JSON
            for (int i = 0; i < lines.length; i++) {
                String[] values = lines[i].replaceAll(",", "").split("۞");

                if (i == 0) //INDEX LIST
                {
                    headers = values;
                } else {
                    builder.append('{');
                    for (int j = 0; j < values.length && j < headers.length; j++) {

                        String jsonvalue = "\"" + headers[j] + "\":\"" + values[j] + "\"";
                        if (j != values.length - 1) { //if not last value of values...
                            jsonvalue += ',';
                        }
                        builder.append(jsonvalue);
                    }
                    builder.append('}');
                    if (i != lines.length - 1) {
                        builder.append(',');
                    }
                }
            }
            builder.append(']');
            output = builder.toString();

            return output;
        }
}

但它不起作用 - 任何帮助表示赞赏

4

2 回答 2

0

您可以使用一些库,而不是使用您自己的逻辑来解析 CSV 并将其转换为 JSON。

对于读取 CSV,您可以使用 opencsv,这使您可以选择直接将 CSV 读取到地图

Map<String, String> values = new CSVReaderHeaderAware(new FileReader("yourfile.csv")).readMap();

发布此您可以使用 Jackon 将地图转换为 JSON。

ObjectMapper objectMapper = new ObjectMapper();
mapper.writeValueAsString(map);

有许多不同的框架可用于读取 CSV 文件并将文本转换为 JSON,您可以探索一下。

于 2021-11-05T11:06:35.730 回答
0

您的实现看起来非常低级。相反,您可以这样做并使用ObjectMapper该类。

Pattern pattern = Pattern.compile(",");
try (BufferedReader in = new BufferedReader(new FileReader(csvFile));) {
    List < Product > products = in .lines().skip(1).map(line - > {
        String[] fields = pattern.split(line);
        return new Product(...use values in fields to create product...);
    }).collect(Collectors.toList());
    ObjectMapper mapper = new ObjectMapper();
    mapper.enable(SerializationFeature.INDENT_OUTPUT);
    mapper.writeValue(System.out, products);
}

更多详细信息可在此处获得

于 2021-11-05T10:59:04.680 回答