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

JSONPath: ค้นหาข้อมูลใน JSON โดยไม่ต้องแยกวิเคราะห์เอง

JSONPath เป็นภาษาสำหรับ query เพื่อดึงค่าจากเอกสาร JSON ผ่านเส้นทาง ซึ่งทำหน้าที่เดียวกับที่ XPath ทำให้กับ XML สำหรับผู้ที่เคยทำงานกับระบบราชการหรือธนาคารไทยที่การเชื่อมต่อยังคงใช้ XML/SOAP เป็นพื้นฐาน ไวยากรณ์นี้จะดูคุ้นเคย

ไวยากรณ์พื้นฐาน

นิพจน์จะเริ่มต้นด้วย $ เสมอ ซึ่งหมายถึงรากของเอกสาร จากนั้นเข้าถึงฟิลด์ด้วยจุด ($.user.name) หรือวงเล็บเหลี่ยม ($['user']['name']) และเข้าถึงสมาชิกของอาร์เรย์ด้วยดัชนี ($.items[0])

เลือกหลายค่าพร้อมกัน

สัญลักษณ์ * เลือกสมาชิกทั้งหมดในระดับหนึ่ง ในขณะที่ .. คือการค้นแบบ recursive ที่หาฟิลด์ได้ในทุกความลึกโดยไม่ต้องรู้เส้นทางที่แน่นอน ตัวกรองอย่าง [?(@.price < 10)] เลือกสมาชิกของอาร์เรย์ตามเงื่อนไขที่คล้ายกับนิพจน์ในภาษาโปรแกรม

ใช้ทำอะไร

  • ดึงฟิลด์หนึ่งจาก API response ขนาดใหญ่ได้อย่างรวดเร็วขณะ debug โดยไม่ต้องเขียนสคริปต์
  • กรองล็อกหรือเหตุการณ์ในรูปแบบ JSON ตามเงื่อนไขได้ทันที
  • อ่านค่าจากไฟล์ตั้งค่าโดยไม่ต้องเขียน parser เอง

JSONPath เทียบกับ XPath: ความผิดพลาดเรื่องดัชนีที่พบบ่อย

ผู้ที่มาจาก XPath ซึ่งการนับดัชนี node เริ่มจาก 1 (book[1] คือสมาชิกตัวแรก) มักทำผิดพลาดเมื่อเปลี่ยนมาใช้ JSONPath ซึ่งการนับดัชนีเริ่มจาก 0 — book[1] จึงกลายเป็นสมาชิกตัวที่สองไปแล้ว ความแตกต่างเพียงจุดเดียวนี้เป็นสาเหตุของบั๊กจำนวนไม่น้อยเมื่อย้ายระบบเชื่อมต่อ XML/XPath เก่าไปสู่ API แบบ JSON

Key ที่มีจุดหรือช่องว่าง

ถ้าชื่อฟิลด์เองมีจุด ยัติภังค์ หรือช่องว่างอยู่ในตัว (เช่น key ตามตัวอักษร "user.name" ไม่ใช่ฟิลด์ที่ซ้อนกัน) การเขียนแบบจุด $.user.name จะกำกวมทันที — parser จะอ่านเป็นฟิลด์ที่ซ้อนกัน user และ name แทน ในกรณีนี้ต้องใส่ key ไว้ในวงเล็บเหลี่ยมพร้อมเครื่องหมายคำพูด: $['user.name']

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