การแปลง 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
| คุณสมบัติ | Jackson | Gson |
|---|---|---|
| Performance | เร็วกว่าเล็กน้อย | ดีมาก |
| Features | มากกว่า (custom serializer, view, module) | พอใช้งานง่าย |
| Default Date Format | Timestamp (milliseconds) | ISO-8601 |
| Immutable Objects | รองรับดี (Constructor/Builder) | ต้อง config เพิ่ม |