บทความทั้งหมด

JSON Flatten: แปลงโครงสร้างซ้อนกันให้เป็นรายการแบบแบน

ออบเจกต์และอาร์เรย์ที่ซ้อนกันเหมาะสำหรับแสดงโครงสร้าง แต่ใช้งานลำบากในที่ที่ต้องการรายการคู่ key-value แบบแบนราบ เช่น สเปรดชีต บรรทัดล็อก หรือไฟล์แปลภาษา Flatten (การทำให้แบนราบ) แก้ปัญหานี้โดยตรง

มันทำงานอย่างไร

แต่ละฟิลด์ที่ซ้อนกันจะกลายเป็นหนึ่งแถว โดย key คือเส้นทางเต็มไปยังค่า (เขียนด้วยจุดหรือดัชนีในวงเล็บเหลี่ยม) และ value คือค่านั้นเอง เช่น {"user": {"address": {"city": "เชียงใหม่"}}} จะกลายเป็นคู่ user.address.city → "เชียงใหม่" สมาชิกของอาร์เรย์จะได้รับดัชนีในเส้นทาง เช่น items[0].name

ที่ใช้กันจริง: ไฟล์แปลภาษา (i18n)

Key แบบแบนราบที่ใช้จุดคั่นเป็นรูปแบบมาตรฐานของไฟล์ localization ในไลบรารีอย่าง i18next — เขียนเป็น settings.profile.title แทนที่จะเป็นโครงสร้าง JSON ที่ซ้อนกัน แพลตฟอร์มแปลภาษาและขั้นตอนการทำงานที่ใช้สเปรดชีตมักคาดหวังรูปแบบแบนราบนี้เกือบทุกครั้ง การทำให้ไฟล์ภาษาที่ซ้อนกันแบนราบก่อนจึงมักเป็นขั้นตอนแรกก่อนส่งให้นักแปล

ใช้ทำอะไรในทางปฏิบัติ

  • นำเข้าข้อมูลที่ซ้อนกันจาก API เข้าสเปรดชีตหรือตารางฐานข้อมูลแบบแบนราบ
  • ทำให้การเปรียบเทียบออบเจกต์ที่ซับซ้อนสองชิ้นแบบทีละบรรทัดอ่านง่ายขึ้น
  • ค้นหาค่าหนึ่งค่าอย่างรวดเร็วใน JSON ที่ซ้อนกันลึกมาก โดยเห็นเส้นทางเต็มในครั้งเดียว

การดำเนินการย้อนกลับ: unflatten

การสร้างโครงสร้างที่ซ้อนกันขึ้นใหม่จากรายการแบนราบ หมายถึงการแยกแต่ละ key ออกเป็นส่วนของเส้นทาง (ตามจุดและดัชนีในวงเล็บเหลี่ยม) แล้วค่อย ๆ สร้างออบเจกต์และอาร์เรย์ที่ซ้อนกันขึ้นมา ความกำกวมจะเกิดขึ้นเมื่อเส้นทางหนึ่งอาจหมายถึงสองอย่าง — ถ้าข้อมูลมีทั้ง key ตามตัวอักษร "a.b" และเส้นทางที่ซ้อนกัน a.b พร้อมกัน unflatten จะไม่สามารถเดาได้ว่าตั้งใจให้เป็นแบบไหน จึงแจ้งความขัดแย้งแทนที่จะเขียนทับเงียบ ๆ

ลองใช้เครื่องมือ