เครื่องมือทดสอบ JSON Path

ให้วางเอกสารในรูปแบบ JSON แล้วป้อนสูตร JSONPath เช่น $..book[?(@.price<10)] โปรแกรมทดสอบจะประเมินสูตรนี้กับเนื้อหาในเอกสาร และแสดงค่าที่ตรงกันทั้งหมดพร้อมเส้นทางการเข้าถึงที่แม่นยำสำหรับแต่ละค่า วิธีนี้มีประโยชน์อย่างมากในการตรวจสอบความถูกต้องของคำสั่งที่คุณกำลังจะใส่ลงในสคริปต์หรือข้อกำหนด API (Postman, k6 และ JMeter ต่างรองรับ JSONPath)

วิธีทดสอบสูตร JSONPath

  1. 1

    วางเอกสาร JSON

    JSON ที่ถูกต้องทุกประเภท, ออบเจกต์, อาร์เรย์, และโครงสร้างที่มีการซ้อนกันหลายระดับ

  2. 2

    ป้อนสูตร

    เริ่มต้นด้วย `$` สำหรับราก ใช้ `.` สำหรับลูก ใช้ `..` สำหรับการสืบทอดแบบเรกูเรสซีฟ และใช้ `[*]` สำหรับไวลด์คาร์ด

  3. 3

    ดูผลการจับคู่แบบเรียลไทม์

    ผลการจับคู่แต่ละรายการจะแสดงพร้อมค่าและ JSONPath ฉบับเต็ม โดยจะถูกเน้นไว้ในเอกสารต้นฉบับ

  4. 4

    คัดลอกผลลัพธ์

    คัดลอกผลการจับคู่เป็นอาร์เรย์ JSON หรือคัดลอกเส้นทางแต่ละเส้นเพื่อนำไปใช้ในโค้ดขั้นตอนถัดไป

คำอธิบายไวยากรณ์ของ JSONPath

นิพจน์ ความหมาย
$ องค์ประกอบหลัก
$.store ลูกของ $ ซึ่งมีชื่อว่า store
$["store"] เหมือนกัน รูปแบบกรอบ
$..author คุณสมบัติทั้งหมดของ author ในทุกระดับความลึก
$.store.book[*] หนังสือทุกเล่มในร้านค้า
$.store.book[0] หนังสือเล่มแรก
$.store.book[-1:] หนังสือเล่มสุดท้าย
$.store.book[0:2] หนังสือสองเล่มแรก (ชุด)
$.store.book[?(@.isbn)] หนังสือที่มีคุณสมบัติ isbn
$.store.book[?(@.price < 10)] หนังสือราคาต่ำกว่า 10
$.store.book[?(@.category == "fiction")] หนังสือแนวนิยาย
$..* ค่าทุกค่า อยู่ทุกหนทุกแห่ง

รูปแบบการกรอง

นิพจน์การกรองใช้ @ เพื่อระบุโหนดปัจจุบัน เครื่องทดสอบรองรับตัวดำเนินการทั่วไป ได้แก่ ==, !=, <, >, <=, >=, &&, || และ regex =~

$.items[?(@.qty >= 10 && @.price < 50)]

รูปแบบต่าง ๆ ของ JSONPath

มีการพัฒนาฟังก์ชัน JSONPath หลายรูปแบบที่มีข้อจำกัดในการทำงานร่วมกันเล็กน้อย โปรแกรมทดสอบนี้ใช้ตามข้อกำหนดเดิมของ Goessner และการปรับปรุงตาม RFC 9535 ซึ่งสามารถทำงานร่วมกันได้ดีกับ:

  • JaywayJsonPath (Java)
  • jsonpath-plus (JavaScript)
  • jsonpath-rw (ในภาษา Python)
  • คำสั่งการแสดงออกของเส้นทางพื้นฐานใน jq

คุณสมบัติที่ไม่สามารถใช้งานร่วมกันได้ (เช่น การใช้สคริปต์ร่วมกับโค้ด JS แบบไม่กำหนดลักษณะเฉพาะ) จะถูกระบุด้วยเครื่องหมายในแผงแสดงข้อผิดพลาด

เมื่อ JSONPath มีประสิทธิภาพเหนือกว่าตัวแยกข้อมูลแบบเต็มรูปแบบ

  • ข้อกำหนดการทดสอบ: pm.expect(jsonData).to.have.jsonPath(...) ของ Postman จะรับเส้นทางเป็นอินพุต
  • การดึงค่ากำหนดค่า: ดึงค่าเพียงหนึ่งรายการจากผลตอบกลับของ API ที่มีปริมาณมาก โดยไม่ต้องใช้ไลบรารีใดๆ
  • สคริปต์ทดสอบการโหลด: k6, JMeter และ Gatling ล้วนรองรับ JSONPath สำหรับการตรวจสอบ
  • Kubernetes / AWS CLI: แฟลก --query และ --jsonpath ช่วยให้คุณกำหนดรูปแบบผลลัพธ์จากบรรทัดคำสั่งได้

ข้อผิดพลาดที่พบบ่อย

  • การใช้ . กับอาร์เรย์: $.users.0.name ไม่ถูกต้อง กรุณาใช้ $.users[0].name แทน
  • ลืมใช้ .. สำหรับการกำหนดความลึก เส้นทางเช่น $.name จะตรงกับ name ในระดับสูงสุดเท่านั้น ควรใช้ $..name สำหรับทุกกรณี
  • การสับสนระหว่าง JSONPath กับ jq: jq เป็นชุดฟังก์ชันที่ครอบคลุมมากกว่า โดยมีความสามารถในการควบคุมลำดับการประมวลผลและการแปลงข้อมูล ในขณะที่ JSONPath ถูกออกแบบมาเพื่อการดึงข้อมูลเท่านั้น
  • การกำหนดตำแหน่งด้วย Regex: =~ /foo/ จะจับคู่กับส่วนของข้อความ (substring) โดยอัตโนมัติ ส่วน /^foo$/ ใช้สำหรับการจับคู่แบบแม่นยำ

คำถามที่พบบ่อย

JSONPath เป็นภาษาสำหรับการดึงข้อมูลแบบบริสุทธิ์ ซึ่งรองรับการเลือกข้อมูล การกรองข้อมูล และการตัดข้อมูลเป็นช่วง ในขณะที่ jq เป็นภาษาสำหรับการสร้างคำสั่งค้นหาและการแปลงข้อมูลอย่างสมบูรณ์ พร้อมความสามารถในการควบคุมลำดับการทำงาน การใช้ตัวแปร และการเรียกใช้ฟังก์ชัน หากต้องการการดึงข้อมูลแบบง่าย JSONPath จะมีความยืดหยุ่นและสามารถนำไปใช้งานได้ในหลากหลายสภาพแวดล้อมมากกว่า แต่หากต้องการดำเนินการแปลงข้อมูล ก็ควรใช้ jq

ข้อกำหนดเดิมของ Goessner ร่วมกับการปรับปรุงตาม RFC 9535 โดยสอดคล้องกับ JaywayJsonPath (สำหรับ Java) และ jsonpath-plus (สำหรับ Node.js) ไม่รองรับการขยายเฉพาะไดอะเล็กต์ (เช่น สูตรสคริปต์ที่มีโค้ดแบบอิสระ)

ใช่ รหัส $..book[?(@.title =~ /^Harry.*/)] จะตรงกับหนังสือทุกเล่มที่ชื่อเริ่มต้นด้วยคำว่า “Harry” ส่วนรหัส ^ และ $ จะใช้สำหรับการจับคู่แบบตรงเต็มรูปแบบ

ใช่ ทั้ง JSON และตัวประเมิน JSONPath ล้วนอยู่ภายในเบราว์เซอร์ของคุณ โดยเอกสารและคำขอต่างๆ จะไม่ออกจากแท็บเดิมเลย

เครื่องมือที่เกี่ยวข้อง

ตารางอ้างอิง ASCII

ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL

อ้างอิงตัวอักษร HTML

รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ

ตารางอ้างอิงแป้นพิมพ์ลัด

ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux

ตัวตรวจสอบอีเมล

ตรวจสอบที่อยู่อีเมล: ตรวจไวยากรณ์ RFC 5322 ค้นหา MX เรกคอร์ดแบบเรียลไทม์ พร้อมรายละเอียดส่วนท้องถิ่น โดเมน และความยาว ไม่มีการส่งอีเมลใด ๆ

เครื่องสร้างตัวอักษรสุ่ม

สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน

เครื่องมือสร้าง EditorConfig

สร้างไฟล์ .editorconfig ด้วยกฎสไตล์และขนาดการเยื้อง การจบบรรทัด ชุดอักขระ และช่องว่างของคุณ เพื่อให้การจัดรูปแบบสอดคล้องกันในทุก IDE และโปรแกรมแก้ไข

เครื่องมือนี้มีให้บริการในภาษาอื่น