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']