JSON สนับสนุนโครงสร้างข้อมูลต่อไปนี้ (เทียบเท่า Java): Scalar, Array / List และ Map
A Set
ไม่รองรับ out-of-the-box ใน JSON
ฉันคิดหลายวิธีในการเป็นตัวแทนของชุดใน JSON:
[1] - เป็นรายการ
อย่างไรก็ตามรายการมีลำดับของตัวเองดังนั้นสองรายการต่อไปนี้["a", "b"]
และ["b", "a"]
ไม่เท่ากับรายการ แต่พวกเขาควรจะเท่ากับชุด
[2] - เป็นแผนที่
ใช้ชุดคีย์ของแผนที่และละเว้นค่า
แต่อีกครั้งโดยใช้การเปรียบเทียบแบบมาตรฐานทั้งสองแบบไม่เหมือนกับแผนที่:
{"a": "foo", "b": "bar"}
, {"a": null, "b": null}
[3] - เป็นแผนที่ที่มีค่าพิเศษ
ใช้สเกลาร์พูด0
หรือnull
บังคับให้มันเป็นค่าของทุกคีย์ในแผนที่:
{"a": 0, "b": 0}
ด้วยวิธีนี้ภายใต้เครื่องมือเปรียบเทียบมาตรฐานวัตถุจะเท่ากันแม้ว่าจะเปลี่ยนการเรียงลำดับคีย์
อย่างไรก็ตามเทคนิคนี้สร้างมลภาวะเอกสาร JSON ด้วยข้อมูลที่ไม่เกี่ยวข้อง
[4] - เป็นรายการสั่งซื้อ
กลับไปที่คำแนะนำแรก แต่คราวนี้เป็นรายการสั่งซื้อ ประเภทนี้แก้ปัญหาการเปรียบเทียบ
อย่างไรก็ตามเราควรคำนึงถึงความซับซ้อนของการเรียงลำดับและเครื่องหมายของแผนที่จะจัดการรายการที่ซ้ำกันในขณะที่รายการที่เรียงลำดับไม่ได้ ตัวอย่าง:
{"a": 400, "a": 9}
มีการจัดการเป็น{"a": 9}
แต่มักจะเป็น["g", "g"]
["g", "g"]
ต้องบอกว่าทั้งหมดนั้นดูเหมือนว่ารายการของสัญกรณ์นั้นชัดเจน แต่สัญลักษณ์ของแผนที่นั้นแข็งแกร่งกว่าการทำสำเนาคีย์และทำให้ยากขึ้นที่จะสอดคล้องกับค่าพิเศษ (แม้ว่าจะnull
ดูเหมือนเป็นตัวเลือกที่ดีสำหรับเรื่องนั้น)
คุณคิดอย่างไร? คุณจะแสดงชุดของ JSON อย่างไร
PS
โปรดทราบว่าคำถามนี้เป็นเพียงเกี่ยวกับ JSON ฉันรู้ว่ามีรูปแบบอื่น ๆ เช่น yaml ยังคง ...