เครื่องมือนี้ทำอะไร
JSONPath เป็นภาษาคิวรีสำหรับ JSON คล้ายกับที่ XPath ใช้กับ XML คิวรีอย่าง $.store.book[*].title จะไล่เข้าไปในเอกสารและเลือกค่าที่คุณต้องการ เครื่องมือนี้รันนิพจน์ JSONPath กับ JSON ที่คุณวาง แล้วแสดงทุกผลที่ตรงกันเป็นอาร์เรย์ JSON: ค่าที่พบ พาธแบบมาตรฐานของค่านั้น (เช่น $['store']['book'][0]['title']) หรือทั้งสองอย่าง
เครื่องมือนี้ทำตาม RFC 9535 ซึ่งเป็นมาตรฐาน IETF ที่เผยแพร่ในปี 2024 ผลลัพธ์จึงตรงกับไลบรารีรุ่นใหม่ใน JavaScript, Java, Python, Go และภาษาอื่น ๆ ใช้ทดลองคิวรีก่อนใส่ลงในโค้ด หาสาเหตุที่ตัวกรองไม่คืนค่าอะไรเลย หรือดึงเฉพาะบางฟิลด์จากผลตอบกลับ API ขนาดใหญ่
วิธีใช้
- วาง JSON ลงในช่อง JSON อัปโหลดไฟล์
.jsonหรือกด ตัวอย่าง เพื่อโหลดเอกสารร้านหนังสือแบบคลาสสิก - พิมพ์คิวรีในช่อง นิพจน์ JSONPath ผลที่ตรงกันจะอัปเดตทันทีขณะพิมพ์
- เลือก แสดง: ค่า พาธ หรือคู่พาธ/ค่า
- คัดลอกหรือดาวน์โหลดผลลัพธ์ หากคิวรีมีข้อผิดพลาดทางไวยากรณ์ จะบอกตำแหน่งอักขระที่แยกวิเคราะห์ไม่ผ่าน
สรุปไวยากรณ์
| นิพจน์ | ความหมาย |
|---|---|
$ | รากของเอกสาร |
.name หรือ ['name'] | สมาชิกของอ็อบเจ็กต์ |
[0], [-1] | สมาชิกของอาร์เรย์ (ค่าติดลบนับจากท้าย) |
[1:3], [::2] | สไลซ์: เริ่ม จบ (ไม่รวม) และระยะก้าว |
* | สมาชิกหรือองค์ประกอบทั้งหมด |
..name | name ที่ระดับความลึกใดก็ได้ |
[?@.price < 10] | ลูกที่ทำให้ตัวกรองเป็นจริง; @ คือรายการปัจจุบัน |
ตัวกรองสามารถรวมเงื่อนไขด้วย &&, || และ ! เปรียบเทียบกับส่วนอื่นของเอกสารผ่าน $ และเรียกใช้ฟังก์ชันได้: length(@.tags) > 2, count(@.items[*]) == 0, match(@.code, '[A-Z]{3}') เมื่อต้องการให้ทั้งสตริงตรงกับนิพจน์ปกติ และ search(@.title, 'Ring') เมื่อแค่ตรงกันที่ใดก็ได้
ตัวอย่าง
กับข้อมูลร้านหนังสือตัวอย่าง คิวรีนี้เลือกชื่อหนังสือที่ราคาต่ำกว่า 10:
$.store.book[?@.price < 10].title
และได้ผลลัพธ์:
["Sayings of the Century", "Moby Dick"]
เปลี่ยนเป็น $..book[?@.isbn].author เพื่อแสดงผู้แต่งของหนังสือที่มี ISBN หรือ $..price เพื่อรวบรวมราคาทั้งหมดในร้าน รวมถึงราคาจักรยานด้วย
คำถามที่พบบ่อย
› รองรับไวยากรณ์ JSONPath แบบใดบ้าง?
รองรับไวยากรณ์มาตรฐาน RFC 9535: ชื่อสมาชิกแบบจุดและวงเล็บเหลี่ยม ไวลด์การ์ด ดัชนีอาร์เรย์ (รวมถึงค่าติดลบ) การสไลซ์ การค้นหาทุกระดับด้วย .. ตัวกรองที่มีการเปรียบเทียบและ && || ! รวมถึงฟังก์ชัน length(), count(), match(), search() และ value() รูปแบบเก่า ?(@.price < 10) ก็ใช้ได้ เพราะวงเล็บเป็นเพียงการจัดกลุ่ม
› ทำไมคิวรีของฉันได้อาร์เรย์ว่าง?
อาร์เรย์ว่างหมายความว่าคิวรีถูกต้องแต่ไม่มีอะไรตรงกัน ตรวจสอบชื่อสมาชิก (ตัวพิมพ์เล็ก-ใหญ่มีผล) และดูว่าค่านั้นเป็นอาร์เรย์หรืออ็อบเจ็กต์ ลองคิวรีกว้าง ๆ เช่น $..* และตั้ง แสดง เป็น พาธ เพื่อดูว่าเอกสารมีอะไรบ้าง
› ใช้นิพจน์สคริปต์อย่าง [(@.length-1)] ได้ไหม?
ไม่ได้ นิพจน์สคริปต์รันโค้ดใดก็ได้และไม่ได้อยู่ในมาตรฐาน ให้ใช้ดัชนีติดลบแทน: [-1] คือสมาชิกตัวสุดท้าย และ [-2:] คือสองตัวสุดท้าย
› JSON ของฉันถูกส่งไปยังเซิร์ฟเวอร์หรือไม่?
ไม่ คิวรีถูกแยกวิเคราะห์และประมวลผลในเบราว์เซอร์ของคุณด้วยโค้ดของหน้าเว็บเอง ไม่มีการอัปโหลดใด ๆ