नमस्ते, मैं csvReader नामक एक निर्भरता का उपयोग करके एक CSV फ़ाइल को JSON सरणी में बदलने की कोशिश कर रहा हूं, लेकिन जब मैं कोड चलाता हूं तो यह JSON प्रतिक्रिया को गलत तरीके से प्रिंट करता है और मुझे यकीन है कि कोई मुझे सही दिशा में इंगित करने में सक्षम क्यों होगा।

    @GetMapping("/convert")
    public List<List<String>> convertCSV() throws FileNotFoundException {
        List<List<String>> records = new ArrayList<List<String>>();
    try (CSVReader csvReader = new CSVReader(new FileReader("C:/Download/cities.csv"));) {
        String[] values = null;

    while ((values = csvReader.readNext()) != null) {
        records.add(Arrays.asList(values));
    }

} catch (IOException e) {
            e.printStackTrace();
        }
        return values;
    }
enter image description here
0
Conor Donohoe 29 जिंदा 2020, 13:20

2 जवाब

सबसे बढ़िया उत्तर

आपका मामला कोई बड़ी बात नहीं है।

आप वह csv पढ़ सकते हैं और json बना सकते हैं।

पहली पंक्ति पढ़ें और कॉलम निर्धारित करें। शेष पंक्तियाँ मान हैं।

public class Foo{

    public static void main(String[] args) throws Exception{

        List<String> csvRows = null;
        try(var reader = Files.lines(Paths.get("dataFile.csv"))){
            csvRows = reader.collect(Collectors.toList());
        }catch(Exception e){
            e.printStackTrace();
        }

        if(csvRows != null){

            String json = csvToJson(csvRows);
            System.out.println(json);

        }

    }

    public static String csvToJson(List<String> csv){

        //remove empty lines
        //this will affect permanently the list. 
        //be careful if you want to use this list after executing this method
        csv.removeIf(e -> e.trim().isEmpty());

        //csv is empty or have declared only columns
        if(csv.size() <= 1){
            return "[]";
        }

        //get first line = columns names
        String[] columns = csv.get(0).split(",");

        //get all rows
        StringBuilder json = new StringBuilder("[\n");
        csv.subList(1, csv.size()) //substring without first row(columns)
            .stream()
            .map(e -> e.split(","))
            .filter(e -> e.length == columns.length) //values size should match with columns size
            .forEach(row -> {

                json.append("\t{\n");

                    for(int i = 0; i < columns.length; i++){
                        json.append("\t\t\"")
                            .append(columns[i])
                            .append("\" : \"")
                            .append(row[i])
                            .append("\",\n"); //comma-1
                    }

                    //replace comma-1 with \n
                    json.replace(json.lastIndexOf(","), json.length(), "\n");

                json.append("\t},"); //comma-2

            });

        //remove comma-2
        json.replace(json.lastIndexOf(","), json.length(), "");

        json.append("\n]");

        return json.toString();

    }

}

पर परीक्षण किया गया:

fname,lname,note
Shaun,Curtis,a
Kirby,Beil,b

-----------------------

[
    {
        "fname" : "Shaun",
        "lname" : "Curtis",
        "note" : "a"
    },  {
        "fname" : "Kirby",
        "lname" : "Beil",
        "note" : "b"
    }
]

यह विधि csv की किसी भी संरचना पर कार्य करती है। स्तंभों को मैप करने की आवश्यकता नहीं है।

2
KunLun 30 जिंदा 2020, 18:39

यह स्ट्रिंग में आपके पढ़ने के डेटा और स्ट्रिंग की सूची को प्रिंट करने के कारण है। यदि आप CSV को ऑब्जेक्ट (JSON ऑब्जेक्ट) में मैप करना चाहते हैं, तो आपको CSV को बीन ऑब्जेक्ट के रूप में पढ़ने की आवश्यकता है, कृपया JSON के रूप में प्रिंट करने के लिए कोड स्निपेट के नीचे खोजें, JSON प्रारूप के रूप में toString विधि को ओवरराइड करें।

उपयोगकर्ता.जावा

public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    private String name;

    @NotNull
    private String surname;

    //Getter and Setters
}

CsvReaderUtil.java

public static List<User> readCsvFile() throws IOException {
            List<User> list = null;
            CSVReader reader = null;
            InputStream is = null;
            try {
                File initialFile = new File("C:\\Users\\ER\\Desktop\\test.csv");
                is = new FileInputStream(initialFile);
                reader = new CSVReader(new InputStreamReader(is), ',', '"', 1);
                ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
                strat.setType(User.class);
                String[] columns = new String[]{"id", "name", "surname"};
                strat.setColumnMapping(columns);
                CsvToBean csv = new CsvToBean();
                list = csv.parse(strat, reader);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                is.close();
                reader.close();
            }
            return list;
        }

अब उपयोगकर्ताओं की इस सूची को JSON ऑब्जेक्ट के रूप में प्रिंट करें।

1
Yogeen Loriya 29 जिंदा 2020, 15:00