ข้ามไปยังเนื้อหา

แปลง JSON เป็นคลาส Java

สร้างคลาส Java จาก JSON โดยใช้ json_typegen (WebAssembly) ในโหมด Kotlin แล้วเขียน data class แต่ละตัวใหม่เป็นคลาส Java ที่มีฟิลด์ private คอนสตรักเตอร์ที่รับทุกฟิลด์ getters และ setters

JSON

Java

เหมาะกับงานแบบไหน

  • สร้าง POJO เพื่อดีซีเรียลไลซ์ผลตอบกลับ REST ด้วย Jackson
  • ร่างคลาส DTO สำหรับ Spring controller จากตัวอย่างเพย์โหลด

วิธีใช้

  1. วางออบเจ็กต์หรืออาร์เรย์ JSON ในตัวแก้ไขด้านซ้าย
  2. ตรวจดูคลาส โดยรากชื่อ Root และออบเจ็กต์ซ้อนกันเป็นคลาสแยกที่ตั้งชื่อตามคีย์
  3. คัดลอกลงไฟล์ .java แยกกัน (มี imports สำหรับ List และ Jackson) และปรับชนิดข้อมูลตามต้องการ

JSON

{
  "id": 42,
  "user_name": "ada",
  "active": true,
  "tags": ["admin", "editor"]
}

คลาส Java

import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;

public class Root {
	private Long id;
	@JsonProperty("user_name")
	private String userName;
	private Boolean active;
	private List<String> tags;

	public Root(Long id, String userName, Boolean active, List<String> tags) {
		this.id = id;
		this.userName = userName;
		this.active = active;
		this.tags = tags;
	}

	public Long getId() {
		return this.id;
	}

…

รายละเอียดและข้อจำกัด

สร้างในเบราว์เซอร์ด้วย WebAssembly ไม่มีการตั้งค่า

คีย์ snake_case เป็นฟิลด์ camelCase พร้อม Jackson @JsonProperty และเพิ่ม import ของ Jackson กับ java.util.List เมื่อใช้

ตัวเลขเป็น Long หรือ Double และบูลีนเป็น Boolean โดย getter ของบูลีนใช้ get ไม่ใช่ is

ค่า null เป็น Object และอาร์เรย์ของ null เป็น List<?> ให้เปลี่ยนเป็นชนิดข้อมูลที่เจาะจงเมื่อทราบข้อมูลจริง

FAQ

แปลง JSON ที่รากเป็นอาร์เรย์ได้หรือไม่?

ได้ รากจะเป็นคลาสห่อ Root ที่มีฟิลด์ List<Root2> และสมาชิกอาร์เรย์เป็นคลาส Root2

รองรับฟิลด์ที่ไม่บังคับหรือไม่?

ตรวจพบคีย์ที่ขาดจากสมาชิกอาร์เรย์บางตัว แต่ผลลัพธ์ Java จะละเครื่องหมายไม่บังคับ ทุกฟิลด์จึงเป็นชนิด wrapper ปกติที่รับ null ได้

สร้าง Lombok annotations หรือ records หรือไม่?

ไม่ สร้างคลาสปกติที่มีคอนสตรักเตอร์ getters และ setters อย่างชัดเจน

กำหนดชนิดข้อมูลให้ null อย่างไร?

ฟิลด์ที่เป็น null ในตัวอย่างจะเป็น Object (private Object note;) เพราะอนุมานชนิดที่เจาะจงไม่ได้ ป้อนตัวอย่างที่มีค่าจริงเพื่อให้ได้ String, Long หรือคลาสซ้อนกัน

ข้อกำหนดและแหล่งอ้างอิง