ตัวแปลง JSON เป็น Dart

ขั้นตอน 1 / 333%

สร้างคลาสโมเดล Dart ที่ไม่ต้องพึ่งพาแพ็กเกจจากออบเจ็กต์ JSON หรืออาร์เรย์ของออบเจ็กต์ตัวอย่าง ตัวแปลงจะรวมข้อมูลจากทุกสมาชิก สร้างคลาสซ้อน รักษาคีย์ JSON เดิม และสร้างชนิดฟิลด์ที่รองรับ Null Safety อย่างถูกต้องพร้อม factory constructor แบบ fromJson เพิ่มเมธอด toJson ได้เมื่อต้องการผลลัพธ์ที่ใช้กับ jsonEncode ตัวอย่างและโค้ดที่สร้างจะอยู่ในเบราว์เซอร์นี้เท่านั้น ไม่มีการอัปโหลดหรือใส่ไว้ใน URL

วิธีการทำงาน

  1. 1

    วางตัวอย่างที่ครอบคลุมข้อมูลจริง

    ใช้ออบเจ็กต์ JSON หนึ่งรายการหรืออาร์เรย์ของออบเจ็กต์ หลายรายการช่วยให้ตรวจพบฟิลด์ที่หายไป รองรับ null หรือมีหลายชนิดข้อมูลได้

  2. 2

    เลือกตัวเลือก Dart

    ตั้งชื่อคลาสหลัก เลือกว่าจะให้ทุกฟิลด์รองรับ null หรือไม่ และเพิ่มเมธอด toJson เมื่อต้องการ

  3. 3

    ตรวจสอบและส่งออก

    ตรวจสอบคลาสที่อนุมานแล้ว จากนั้นคัดลอกโค้ดหรือดาวน์โหลดไฟล์ models.dart ลงในอุปกรณ์

วิธีแปลง JSON เป็นโมเดล Dart ที่รองรับ Null Safety

เอกสาร dart:convert อย่างเป็นทางการ อธิบายว่า jsonDecode() ให้ค่าที่ใช้กับ JSON ได้ เช่น ตัวเลข สตริง ค่าบูลีน null ลิสต์ และแมปที่ใช้สตริงเป็นคีย์ คลาสโมเดลไม่สามารถเข้ารหัสเป็น JSON ได้โดยตรง แต่ jsonEncode() เรียกเมธอด toJson() ของคลาสได้ ตัวแปลงนี้สร้างรูปแบบการแปลงข้อมูลด้วยตนเองโดยไม่เพิ่ม annotation ของ json_serializable หรือแพ็กเกจที่ต้องติดตั้ง

สมมติว่าตัวอย่างมีผู้ใช้พร้อมที่อยู่แบบซ้อน User ที่สร้างขึ้นจะมีฟิลด์ final และ constructor ที่ใช้ named parameter ส่วน User.fromJson(Map<String, Object?> json) จะ cast ค่าพื้นฐานและเรียก UserAddress.fromJson() สำหรับออบเจ็กต์ที่ซ้อนอยู่ หาก address หายไปหรือเป็น null ในออบเจ็กต์ตัวอย่างรายการใดรายการหนึ่ง ชนิดข้อมูลจะกลายเป็น UserAddress? และ factory จะตรวจสอบ null ก่อนสร้างออบเจ็กต์ เมื่อเปิดใช้ toJson โมเดลที่ซ้อนอยู่จะถูกแปลงเป็นแมปแบบ recursive เพื่อให้ jsonEncode() ใช้งานได้

สิ่งที่พบใน JSON ชนิด Dart ที่สร้าง
จำนวนเต็ม int
เลขทศนิยม double
มีทั้งจำนวนเต็มและทศนิยม num
ข้อความ String
ค่าบูลีน bool
ออบเจ็กต์ซ้อน คลาสโมเดลที่สร้างขึ้น
อาร์เรย์ที่มีชนิดข้อมูลสม่ำเสมอ List<T>
อาร์เรย์ซ้อนที่ว่างหรือชนิดข้อมูลไม่เข้ากัน List<Object?>
มีแต่ null หรือค่าที่ชนิดขัดแย้งกัน Object?

ตัวแปลงจะตรวจสอบทุกออบเจ็กต์ในอาร์เรย์หลัก ไม่ได้อ้างอิงเฉพาะรายการแรก ฟิลด์จะรองรับ null เมื่อหายไปจากรายการใดรายการหนึ่งหรือมีค่า null อย่างชัดเจน และคุณยังเลือกให้ทุกฟิลด์รองรับ null ได้หาก API จริงมีรูปแบบไม่แน่นอนกว่าตัวอย่าง คู่มือ Null Safety ของ Dart ระบุว่าชนิดข้อมูลไม่รองรับ null โดยค่าเริ่มต้น และต้องมี ? จึงจะรับ null ได้

การจัดการ identifier และข้อจำกัดของการอนุมาน

คีย์ JSON ไม่จำเป็นต้องเป็นชื่อสมาชิก Dart ที่ถูกต้อง เครื่องมือจะลบเครื่องหมายวรรคตอน เปลี่ยนคำเป็น lowerCamelCase เติมส่วนต่อท้ายที่ปลอดภัยให้คำสงวน และเติมตัวเลขที่คงที่เมื่อชื่อซ้ำกัน คีย์เดิมจะยังอยู่เหมือนเดิมใน json['original-key'] และแมปของ toJson() ชื่อคลาสซ้อนจะใช้ path เต็ม เพื่อไม่ให้ออบเจ็กต์ที่อยู่คนละบริบทถูกรวมเป็นคลาสเดียวโดยไม่ตั้งใจ

ตัวอย่างเพียงหนึ่งชุดไม่อาจยืนยันสัญญา API ทั้งหมดได้ สตริง JSON จะไม่ถูกตีความเป็นวันที่ UUID หรือ enum โดยอัตโนมัติ และอาร์เรย์ว่างก็ไม่มีข้อมูลให้ระบุชนิดสมาชิก ชื่อสมาชิกออบเจ็กต์ที่ซ้ำกันยังไม่ปลอดภัยสำหรับการแปลงไปและกลับ เพราะตัวแยกวิเคราะห์ JSON มักเก็บไว้เฉพาะค่าล่าสุด ตรวจสอบโมเดลที่สร้างเทียบกับเอกสารหรือ schema ของ API ก่อนใช้ใน production เครื่องมือจำกัดขนาดข้อมูล ความลึก จำนวน declaration ที่อนุมาน และขนาดผลลัพธ์ เพื่อควบคุมภาระงานในเบราว์เซอร์

คำถามที่พบบ่อย

ไม่ การแยกข้อมูล การอนุมาน การสร้างโค้ด การคัดลอก และการดาวน์โหลดทั้งหมดเกิดขึ้นในเบราว์เซอร์ JSON และโค้ด Dart ที่สร้างจะไม่ถูกส่งผ่าน เซิร์ฟเวอร์ของเรา หรือใส่ไว้ใน URL

ได้ Flutter ใช้ Dart ดังนั้นคลาสที่ไม่ต้องพึ่งพาแพ็กเกจเหล่านี้จึงใช้ในโปรเจกต์ Flutter ได้ ควรตรวจสอบชนิดข้อมูลที่อนุมานเทียบกับสัญญา API จริงก่อน

ไม่ เครื่องมือสร้าง fromJson ด้วยตนเองและเมธอด toJson แบบเลือกได้ โดยไม่ต้องพึ่งพาแพ็กเกจหรือ build_runner

ฟิลด์ที่พบว่าเป็น null หรือหายไปจะรองรับ null คุณเลือกให้ทุกฟิลด์ที่สร้างรองรับ null ได้เมื่อตัวอย่างไม่ครอบคลุมข้อมูลจริง

ไม่ได้ ผลลัพธ์สะท้อนเฉพาะค่าที่พบเท่านั้น ใช้ออบเจ็กต์ตัวอย่างหลายรายการและเปรียบเทียบผลลัพธ์กับ schema หรือเอกสารของผู้ให้บริการ

เครื่องมือที่เกี่ยวข้อง

ตารางอ้างอิง ASCII

ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL

อ้างอิงตัวอักษร HTML

รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ

ตารางอ้างอิงแป้นพิมพ์ลัด

ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux

ตัวตรวจสอบอีเมล

ตรวจสอบที่อยู่อีเมล: ตรวจไวยากรณ์ RFC 5322 ค้นหา MX เรกคอร์ดแบบเรียลไทม์ พร้อมรายละเอียดส่วนท้องถิ่น โดเมน และความยาว ไม่มีการส่งอีเมลใด ๆ

เครื่องสร้างตัวอักษรสุ่ม

สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน

เครื่องมือสร้าง EditorConfig

สร้างไฟล์ .editorconfig ด้วยกฎสไตล์และขนาดการเยื้อง การจบบรรทัด ชุดอักขระ และช่องว่างของคุณ เพื่อให้การจัดรูปแบบสอดคล้องกันในทุก IDE และโปรแกรมแก้ไข

เครื่องมือนี้มีให้บริการในภาษาอื่น