Merubah JSON menjadi CSV menggunakan Java

misalkan kita punya file JSON seperti dibawah ini kita akan mengubahnya menjadi file CSV agar bisa di export ke aplikasi Spreadsheet seperti Excel.

# filename: students.json
        {
          "students" : [{
            "id_card" : "2019110024",
            "name" : "Muhammat Rizki Saputra",
            "major" : "Teknik Informatika",
            "hobbies" : ["coding", "sport"]
          }, {
            "id_card" : "2019110025",
            "name" : "Muhammat Sarif",
            "major" : "Teknik Informatika",
            "hobbies" : ["coding", "sport", "music"]
          }, {
            "id_card" : "2019110026",
            "name" : "Muhammat Alamsyah",
            "major" : "Teknik Informatika",
            "hobbies" : ["coding"]
          }, {
            "id_card" : "2019110027",
            "name" : "Muhammat Alim",
            "major" : "Teknik Informatika",
            "hobbies" : ["aventure"]
          }, {
            "id_card" : "2019110028",
            "name" : "Muhammat Rafly Al ajid",
            "major" : "Teknik Informatika",
            "hobbies" : ["sport"]
          }]
        }

Sebelumnya silahkan buat projek terlebih dahulu dan tambahkan 2 library dibawah ini kedalam depedency di pom.xml

jackson-databind ini adalah library yang kita gunakan untuk membuat JSON dari objek java dan juga untuk membaca JSON menjadi objek java

commons-csv ini adalah library yang kita gunakan untuk membuat csv dan juga untuk membaca file csv

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.15.3</version>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-csv</artifactId>
			<version>1.10.0</version>
		</dependency>

Merubah JSON menjadi file CSV

saya asumsikan anda sudah mengerti cara membaca objek json menjadi objek java

            
           @Data
           @NoArgsConstructor
           @AllArgsConstructor
           public class StudentsResponse {
               @JsonProperty("students")
               private List<Students> students;
           }
           
           @Data
           @NoArgsConstructor
           @AllArgsConstructor
           class Students {
               @JsonProperty("id_card")
               private String idCard;
           
               @JsonProperty("name")
               private String name;
           
               @JsonProperty("major")
               private String major;
           
               @JsonProperty("hobbies")
               private List<String> hobbies;
           }
                
               @Test
               void createCSVfromJSON() {
                   try {
                       // instance objek mapper dari library jackson
                       ObjectMapper mapper = new ObjectMapper();
           
                       // mengubah objek json menjadi objek java
                       StudentsResponse response = mapper.reader()
                               .forType(StudentsResponse.class)
                               .readValue(Files.newBufferedReader(Path.of("students.json")));
           
                       // menentukan tempat file csv yang akan ditulis
                       BufferedWriter bufferWiriter = Files.newBufferedWriter(Path.of("students.csv"));
           
                       // menentukan format csv dan header
                       CSVFormat csvFormat = CSVFormat.DEFAULT.builder()
                               .build();
           
                       // membuat file csv
                       CSVPrinter csvPrinter = new CSVPrinter(bufferWiriter, csvFormat);
                       List<Students> students = response.getStudents();
                       for (var student : students) {
                           csvPrinter.printRecord(
                                   student.getIdCard(),
                                   student.getName(),
                                   student.getMajor(),
                                   student.getHobbies()
                           );
                       }
                       csvPrinter.flush();
                       bufferWiriter.close();
                   } catch (IOException error) {
                       System.out.println(error.getMessage());
                   }
               }

di file students.csv hasilnya akan terlihat seperti dibawah ini

                2019110024,Muhammat Rizki Saputra,Teknik Informatika,"[coding, sport]"
               2019110025,Muhammat Sarif,Teknik Informatika,"[coding, sport, music]"
               2019110026,Muhammat Alamsyah,Teknik Informatika,[coding]
               2019110027,Muhammat Alim,Teknik Informatika,[aventure]
               2019110028,Muhammat Rafly Al ajid,Teknik Informatika,[sport]