Merubah JSON menjadi CSV menggunakan Java

10 minute read

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]