JSON to Java Converter: แปลง JSON เป็น POJO Class แบบสำเร็จรูปในไม่กี่วินาที
เรียนรู้วิธีแปลง JSON payload เป็น Java POJO class ที่พร้อมใช้งานได้ทันทีด้วย JSON to Java Converter รองรับ nested types, Jackson annotations, wrapper types และการตั้งชื่อแบบ camelCase
Table of Contents
นักพัฒนา Java ทุกคนต่างคุ้นเคยกับบทวนให้พบกันใหม่ของ... ทุกครั้งที่ API contract มาถึงมือในรูปแบบ JSON sample สิ่งแรกที่ต้องทำก่อนเขียน business logic เลยก็คือการนั่งพิมพ์ model class เป็นสิบตัวด้วยมือ — เขียน fields, getters, setters และ @JsonProperty annotations ให้พอดีกับ Jackson มันเป็นงานที่ซ้ำซาก ผิดพลาดง่าย และกินเวลาได้เป็นชั่วโมงโดยไม่จำเป็น
JSON to Java Converter ตัดขั้นตอนนั้นทิ้งไปทั้งหมด เพียงวาง (paste) JSON object หรือ array ลงไป เครื่องมือจะ generate Java POJO class ที่ compile ได้ทันที — พร้อม nested class สำหรับ object ที่ซ้อนกัน List<T> สำหรับ array และ options สำหรับ Jackson annotations กับ nullable wrapper types ทุกอย่างทำงาน client-side ใน browser ของคุณ ดังนั้นแม้แต่ payload ที่เป็นความลับก็ไม่มีทางหลุดออกจากเครื่องไปไหน
ในคู่มือนี้ เราจะพาไปดูว่าทำไม model ที่ generate มาถึงดีกว่าพิมพ์เอง การแปลง type ทำงานอย่างไร และ workflow แบบไหนที่เครื่องมือนี้ช่วยประหยัดเวลาได้มากที่สุด
ทำไมต้องใช้ JSON to Java Converter?
- ประหยัดเวลาเป็นชั่วโมงต่อการ integrate API หนึ่งตัว — การนั่งพิมพ์ model class ด้วยมือเป็นงานที่ช้าและซ้ำซาก ตัว converter สร้างผลลัพธ์แบบเดียวกันได้ในราวหนึ่งวินาที ให้คุณข้ามไปทำงานส่วนที่ท้าทายกว่าได้เลย
- กำจัด mapping bug แบบเงียบ ๆ — ชื่อ field ที่พิมพ์ผิดหรือ @JsonProperty ที่ค่าไม่ตรงจะ fail แบบไม่มีเสียงเตือน (Jackson ปล่อย field เป็น null เฉย ๆ) annotation ที่ generate มาสะกดชื่อตรงกับ JSON key เป๊ะ ๆ ทำให้ความผิดพลาดแบบนี้เกิดไม่ได้เลย
- จัดการโครงสร้างซ้อนกันอัตโนมัติ — JSON ที่ nest กันลึกหลายชั้นกลายเป็น nested static class โดยที่คุณไม่ต้องวางแผน class hierarchy เอง เครื่องมือ infer โครงสร้างทั้งหมดจากตัวอย่างที่วางให้
- เลือก default ที่ปลอดภัยอย่างมีเหตุผล — nullable wrapper types (Integer, Boolean, Double) ช่วยหลีกเลี่ยงกับดัก NullPointerException คลาสสิก เมื่อ JSON key ที่หายไป deserialize ลง primitive ที่เก็บ null ไม่ได้
- payload ของคุณเป็นความลับ 100% — ไม่มี server round-trip การ parse และ generate ทั้งหมดเกิดใน browser ทำให้ใช้กับ internal API contract ข้อมูลลูกค้า หรือ payload ก่อน release ได้อย่างอุ่นใจ
- ไม่ต้องติดตั้ง ไม่ต้องสมัคร ไม่มีค่าใช้จ่าย — ต่างจาก IDE plugin หรือ code-gen library ไม่มีอะไรต้อง install และไม่ต้องสร้าง account เปิดหน้าเว็บ วาง ก็อป จบ
คุณสมบัติเด่น
| คุณสมบัติ | รายละเอียด |
|---|---|
| ตั้งชื่อ root class | ตั้งชื่อ class หลักให้ตรงกับ convention ของ codebase (User, OrderResponse, WebhookPayload) |
| Nullable wrapper types | ใช้ Integer, Boolean, Double, Long แทน int, boolean, double |
| Jackson annotations | เพิ่ม @JsonProperty("key เดิม") ให้ทุก field พร้อม import ที่จำเป็น |
| แปลงเป็น camelCase | เปลี่ยน JSON key แบบ snake_case ให้เป็น camelCase ตามสไตล์ Java |
| สร้าง nested class | object ที่ซ้อนกันกลายเป็น inner class แบบ public static |
| infer ชนิดของ array | array ใน JSON กลายเป็น List<T> โดย infer ชนิดจากสมาชิกข้างใน |
| Copy และ download | คลิกเดียว copy โค้ด หรือ download เป็นไฟล์ .java ได้เลย |
อีกสองจุดที่น่าไฮไลต์: array ที่มีชนิดปนกันหรือว่างเปล่าจะถูกลดระดับเป็น List<Object> อย่างซื่อตรงแทนที่จะเดาผิด ๆ และถ้า root ของ JSON เป็น array เครื่องมือจะ generate declaration แบบ List<RootClassName> ให้ response ที่มาเป็นรูป array ก็รองรับครบ
นอกจากนี้โค้ดที่ได้ยังมี getters และ setters ครบทุก field ทำให้ class ใช้งานได้ทันทีกับ frameworks ที่อาศัย JavaBean conventions — ไม่ว่าจะเป็น Jackson, JPA, ModelMapper หรือ mapping library ส่วนใหญ่
วิธีใช้งาน
- เปิดหน้า JSON to Java Converter แล้ววาง JSON object หรือ array ของคุณลงในช่อง input — JSON ที่ valid ทุกรูปแบบใช้ได้ รวมถึงโครงสร้างที่ nest กันลึก ๆ
- ตั้งค่า Root class name ให้ตรง convention ของโปรเจกต์ เช่น OrderResponse แทนชื่อ default
- เลือก options สามตัวตามต้องการ: Use nullable wrapper types, Add Jackson annotations และ Convert fields to camelCase
- ตรวจสอบโค้ด Java ที่ generate ในช่อง output — ตัว converter จะ regenerate ทันทีที่เปลี่ยน options ทำให้เปรียบเทียบแบบ live ได้
- กด Copy เพื่อก็อปโค้ดไปใช้ใน IDE หรือกด Download เพื่อบันทึกเป็นไฟล์ .java ลง source tree โดยตรง
การแปลง JSON ไปเป็น Java
ตัว converter ใช้กฎที่เรียบง่ายแต่คัดสรรมาอย่างดี scalar values จะ map ตามชนิดของ JSON โดย integer กับ boolean ได้รับการดูแลเป็นพิเศษ:
| ค่าใน JSON | Java type (ปิด wrappers) | Java type (เปิด wrappers) |
|---|---|---|
| "Ada Lovelace" | String | String |
| 42 | int | Integer |
| 3.14 | double | Double |
| true | boolean | Boolean |
| [1, 2, 3] | List<Integer> | List<Integer> |
| {...} object ซ้อน | nested static class | nested static class |
ลองดูการแปลงจริง กำหนด input นี้:
{
"user_id": 42,
"full_name": "Ada Lovelace",
"is_active": true,
"roles": ["admin", "dev"],
"address": {
"city": "London",
"zip_code": "SW1A 1AA"
}
}
ตัว converter (เปิด options ครบ) จะ generate:
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
public class User {
@JsonProperty("user_id")
private Integer userId;
@JsonProperty("full_name")
private String fullName;
@JsonProperty("is_active")
private Boolean isActive;
private List<String> roles;
private Address address;
public static class Address {
private String city;
@JsonProperty("zip_code")
private String zipCode;
}
// getters และ setters สำหรับทุก field
}
สังเกตว่าทุกชิ้นเข้ากันอย่างไร option camelCase ให้ชื่อ field สไตล์ Java ที่อ่านรู้เรื่อง ขณะที่ @JsonProperty annotations เก็บชื่อ key ดั้งเดิมไว้ — userId ใน Java จึง map กลับไปที่ user_id ใน JSON การ serialize นั้น round-trip ได้สมบูรณ์ทั้งสองทิศทาง: deserialize response จาก API เข้า class แก้ไข แล้ว serialize กลับออกไป รูปแบบบน wire จะเหมือนเดิมทุกประการ
object address ที่ nest อยู่กลายเป็น static inner class ส่วน array roles ถูก infer เป็น List<String> เพราะสมาชิกทุกตัวเป็น string ถ้า array ว่างเปล่าหรือมีชนิดปนกัน เครื่องมือจะถอยไปใช้ List<Object> — ซึ่งเป็นทางเลือกที่ตรงไปตรงมาเมื่อตัวอย่างไม่พอจะสรุป type ที่เข้มกว่านั้น
ข้อสังเกตปฏิบัติเกี่ยวกับ wrappers: primitive เก็บ null ไม่ได้ ถ้า JSON key หายไป field แบบ primitive จะ deserialize เป็น 0 หรือ false — แยกไม่ออกจากค่าจริง ส่วน wrapper types จะได้ null ทำให้โค้ดของคุณตรวจจับและจัดการข้อมูลที่หายไปได้อย่างชัดเจน นี่คือเหตุผลที่ wrapper เป็น default
ตัวอย่างการใช้งานจริง
สร้าง Model สำหรับ REST API Client
คุณกำลัง integrate กับ third-party API และมีอยู่ sample response จาก docs ของเขา — วางเข้าไป ตั้งชื่อ class เป็น ApiClientResponse เปิด Jackson annotations แล้วคุณจะได้ model พร้อม deserialize ในไม่กี่วินาที ใช้คู่กับ curl เพื่อดึง response จริง ๆ แล้วคุณ scaffold model layer ของ client SDK ทั้งก้อนได้ในไม่กี่นาที
Scaffolding DTO สำหรับ Spring Boot
Endpoint ใหม่ รู้ payload ที่เข้ามาแล้ว แต่ controller ยังไม่ได้เขียน? ใช้ converter สร้าง request DTO แบบเปิด wrapper types วางไว้ข้าง controller แล้ว bind ด้วย @RequestBody เพราะ class เป็นไปตาม JavaBean conventions คุณสามารถต่อ validation annotations (@NotNull, @Size) ได้โดยไม่ชนกันเลย
ยกระดับโค้ด Untyped ให้เป็น Typed Model
Codebase เก่าที่เต็มไปด้วยการจับ Map<String, Object>? แปลง map ตัวแทนให้เป็นรูป JSON วางเข้า converter ได้ class จริง แล้วค่อย ๆ refactor ทีละ call site getters และ setters ที่ generate มาให้ทำให้ IDE ของคุณมีพลัง refactor และ navigate ที่ raw map จะให้ไม่ได้
แชร์ Payload Contract ข้ามทีม
เมื่อเพื่อนร่วมทีม backend ถามว่า "ต้องการหน้าตา payload แบบไหน?" ให้วาง JSON ที่คุณคาดหวังแล้วส่ง class ที่ generate ไปให้เป็น contract — มันแม่นยำ compile ได้ และทำหน้าที่เป็น documentation ไปในตัว ไม่มีความคลุมเครือเรื่อง type หรือ nullability ให้ต้องเดา
แนวทางปฏิบัติที่ดี
- แปลงจาก sample ที่เป็นตัวแทน ไม่ใช่แบบมินิมอล — ตัว inferencer มองเห็นเฉพาะสิ่งที่อยู่ในสิ่งที่คุณวาง ใส่ทุก field เปิด object ที่ nest กันให้เต็ม และใช้ array ที่ไม่ว่างเปล่า เพื่อให้ type ที่ได้แน่นที่สุด
- เปิด wrapper types ถ้าไม่มีเหตุผลให้ปิด — มันทำให้ key ที่หายไปถูกตรวจพบได้ (null) แทนที่จะแอบกลายเป็น 0 หรือ false เงียบ ๆ
- ใช้ annotations คู่กับ camelCase เสมอ — การเปลี่ยนชื่อ field โดยไม่มี @JsonProperty จะทำให้ wire contract พัง options สองตัวนี้ออกแบบมาให้ใช้เป็นคู่กัน
- Regenerate แทนการแก้โค้ดเอง — เมื่อ API เปลี่ยน ให้วาง sample ใหม่แล้ว regenerate แทนการ patch field ทีละตัว เพราะความ consistent ของเครื่องมือนี่แหละที่การแก้มือจะค่อย ๆ ทำลาย
- ตั้งชื่อ class ให้เข้ากับ domain ของคุณ — User ชนะ Root ใน code review ได้เสมอ ตั้ง root class name ก่อนก็อปเสมอ
- ตรวจ nested class ก่อน commit — ถ้าทีมนิยมหนึ่ง class ต่อไฟล์ ให้แยก nested class ออกเป็นไฟล์แยก โครงสร้างย้ายได้ตรง ๆ ไม่ต้องแปลงอะไร
เริ่ม Generate Java Class ได้เลยตอนนี้
ครั้งหน้าที่ JSON payload มาถึงโต๊ะทำงาน ให้ข้าม boilerplate ไปเลย เปิด JSON to Java Converter วาง sample ของคุณ แล้วรับ POJO ที่สะอาด มี annotation ครบ และมี getter-setter เต็มรูปแบบในราวหนึ่งวินาที — ฟรี ไม่ต้องสมัครสมาชิก และข้อมูลของคุณไม่ออกจาก browser ไปไหน จึงใช้ได้กับทุก payload ตั้งแต่ API docs สาธารณะไปจนถึง contract ภายในองค์กร
เครื่องมือที่เกี่ยวข้อง
- JSON to TypeScript Converter — workflow เดียวกันแต่สำหรับ TypeScript interfaces และ types
- JSON to YAML Converter — แปลง payload สำหรับ config และ pipeline ที่ใช้ YAML
- JSON Formatter — เก็บระเบียบและตรวจสอบ JSON ที่รก ๆ ก่อนนำไปแปลง
ขอให้สนุกกับการเขียนโค้ด!