Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

แปลง Java POJO เป็น JSON อย่างง่ายด้วย Jackson และ Gson

การแปลง Java Object (POJO) เป็น JSON เป็นงานที่พบบ่อยในการพัฒนา บทความนี้จะ示範 2 ไลบรารี่ยอดนิยมคือ Jackson และ Gson

POJO ตัวอย่าง: Person Class

import java.util.List;
import java.util.Map;

public class Person {
    private String name;
    private Integer age;
    private List<String> hobbies;
    private Map<String, String> languages;
    
    // Getters & Setters
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public Integer getAge() { return age; }
    public void setAge(Integer age) { this.age = age; }
    public List<String> getHobbies() { return hobbies; }
    public void setHobbies(List<String> hobbies) { this.hobbies = hobbies; }
    public Map<String, String> getLanguages() { return languages; }
    public void setLanguages(Map<String, String> languages) { this.languages = languages; }
}

แปลง Java เป็น JSON ด้วย Jackson

เพิ่ม Dependency (Maven)

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

หมายเหตุ: jackson-databind จะ pull jackson-core และ jackson-annotations มาให้อัตโนมัติ

โค้ดตัวอย่าง Jackson

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ConvertJavaObjectToJson {
    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT); // Pretty print
        
        Person person = createPerson();
        
        try {
            // เขียนเป็นไฟล์
            mapper.writeValue(new File("person.json"), person);
            
            // แปลงเป็น JSON String
            String jsonString = mapper.writeValueAsString(person);
            System.out.println(jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private static Person createPerson() {
        Person person = new Person();
        List<String> hobbies = new ArrayList<>();
        hobbies.add("Football");
        hobbies.add("Cooking");
        hobbies.add("Swimming");
        
        Map<String, String> languages = new HashMap<>();
        languages.put("French", "Beginner");
        languages.put("German", "Intermediate");
        languages.put("Spanish", "Advanced");
        
        person.setName("David");
        person.setAge(30);
        person.setHobbies(hobbies);
        person.setLanguages(languages);
        return person;
    }
}

ผลลัพธ์ (Pretty Print):

{
  "name" : "David",
  "age" : 30,
  "hobbies" : [ "Football", "Cooking", "Swimming" ],
  "languages" : {
    "French" : "Beginner",
    "German" : "Intermediate",
    "Spanish" : "Advanced"
  }
}

แปลง Java เป็น JSON ด้วย Gson

เพิ่ม Dependency (Maven)

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

โค้ดตัวอย่าง Gson

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ConvertJavaObjectToJson {
    public static void main(String[] args) {
        // ใช้ GsonBuilder เพื่อ pretty print
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        
        Person person = createPerson();
        String jsonString = gson.toJson(person);
        System.out.println(jsonString);
    }
    
    private static Person createPerson() {
        // โค้ดสร้าง person เหมือนด้านบน
        Person person = new Person();
        List<String> hobbies = new ArrayList<>();
        hobbies.add("Football");
        hobbies.add("Cooking");
        hobbies.add("Swimming");
        
        Map<String, String> languages = new HashMap<>();
        languages.put("French", "Beginner");
        languages.put("German", "Intermediate");
        languages.put("Spanish", "Advanced");
        
        person.setName("David");
        person.setAge(30);
        person.setHobbies(hobbies);
        person.setLanguages(languages);
        return person;
    }
}

เปรียบเทียบ Jackson vs Gson

คุณสมบัติJacksonGson
Performanceเร็วกว่าเล็กน้อยดีมาก
Featuresมากกว่า (custom serializer, view, module)พอใช้งานง่าย
Default Date FormatTimestamp (milliseconds)ISO-8601
Immutable Objectsรองรับดี (Constructor/Builder)ต้อง config เพิ่ม

บทความเกี่ยวข้อง