```html
เคยพบว่าตัวเองต้องขุดคุ้ยข้อมูลจาก JSON response ขนาดใหญ่ เพื่อหาข้อมูลที่คุณต้องการหรือไม่? ถ้าเคย คุณจะรู้ว่ามันเหมือนกับการงมเข็มในมหาสมุทรเลยทีเดียว ขอแนะนำ JSONPath - เครื่องมือเล็กๆ น้อยๆ ที่สามารถทำให้ชีวิตของคุณง่ายขึ้นมากเมื่อต้องจัดการกับข้อมูล JSON ใน APIs
JSONPath คืออะไร?
JSONPath คือภาษา query สำหรับ JSON คล้ายกับ XPath สำหรับ XML มันช่วยให้คุณสามารถนำทางและดึงส่วนต่างๆ ของข้อมูล JSON ของคุณออกมาได้โดยใช้ syntax ที่เรียบง่ายและใช้งานง่าย ลองนึกภาพว่ามันเป็นวิธีในการรัน queries บนข้อมูล JSON ของคุณและได้รับสิ่งที่คุณต้องการโดยไม่ต้องเสียเวลาไปกับการดูข้อมูลทั้งหมด
ทำไมต้องใช้ JSONPath?
ลองนึกภาพว่าคุณมี JSON response ขนาดใหญ่จาก API สิ่งที่คุณต้องการคือค่าของ field เฉพาะที่ซ้อนอยู่ลึกเข้าไปข้างใน หากไม่มี JSONPath คุณจะต้องเขียนโค้ดจำนวนมากเพื่อ parse JSON ซึ่งอาจจะน่าเบื่อและมีโอกาสเกิดข้อผิดพลาดได้ง่าย JSONPath ทำให้สิ่งนี้ง่ายขึ้นโดยให้คุณระบุสิ่งที่คุณต้องการดึงออกมาอย่างแม่นยำ ทำให้โค้ดของคุณสะอาดขึ้นและง่ายต่อการดูแลรักษา
JSONPath ทำงานอย่างไร?
JSONPath ใช้ syntax ที่คล้ายกับ JavaScript object notation พร้อมคุณสมบัติเพิ่มเติมสำหรับการ queries ที่ซับซ้อนมากขึ้น นี่คือภาพรวมอย่างรวดเร็วของ syntax พื้นฐาน:
$
: แสดงถึง root object หรือ array.
หรือ[]
: Child operator; ใช้เพื่อเข้าถึง property ของ object หรือ element ของ array*
: Wildcard; จับคู่กับทุก element หรือ field..
: Recursive descent; ค้นหา nodes ที่ตรงกันในทุกระดับ?()
: ใช้ filter (expression ต้องประเมินค่าเป็น true)()
: Script expression, ใช้ underlying script engine
มาดูตัวอย่างบางส่วนเพื่อดู JSONPath ในการทำงาน
ตัวอย่าง JSONPath พื้นฐาน
พิจารณาข้อมูล JSON ต่อไปนี้จาก API ฐานข้อมูลภาพยนตร์:
{
"movies": {
"action": [
{ "title": "Mad Max: Fury Road", "director": "George Miller", "year": 2015, "rating": 8.1 },
{ "title": "John Wick", "director": "Chad Stahelski", "year": 2014, "rating": 7.4 }
],
"drama": [
{ "title": "The Shawshank Redemption", "director": "Frank Darabont", "year": 1994, "rating": 9.3 },
{ "title": "Forrest Gump", "director": "Robert Zemeckis", "year": 1994, "rating": 8.8 }
],
"comedy": [
{ "title": "The Grand Budapest Hotel", "director": "Wes Anderson", "year": 2014, "rating": 8.1 }
]
}
}
ดึงข้อมูลภาพยนตร์ action ทั้งหมด:
$.movies.action[*]
สิ่งนี้จะให้ array ของ object ภาพยนตร์ action ทั้งหมดแก่คุณ
ดึงข้อมูลชื่อเรื่องของภาพยนตร์ drama ทั้งหมด:
$.movies.drama[*].title
สิ่งนี้จะส่งคืน array ของชื่อเรื่องของภาพยนตร์ drama ทั้งหมด: ["The Shawshank Redemption", "Forrest Gump"]
ดึงข้อมูล rating ของ "Mad Max: Fury Road":
$.movies.action[?(@.title == "Mad Max: Fury Road")].rating
สิ่งนี้จะส่งคืน rating ของ "Mad Max: Fury Road": 8.1
ค้นหาภาพยนตร์ทั้งหมดที่ออกฉายในปี 2014:
$.movies..[?(@.year == 2014)]
สิ่งนี้จะส่งคืนภาพยนตร์ทั้งหมดที่ออกฉายในปี 2014 ซึ่งในกรณีนี้คือ: ["John Wick", "The Grand Budapest Hotel"]
JSONPath ใน APIs
การใช้ JSONPath ใน APIs นั้นมีประโยชน์อย่างเหลือเชื่อเมื่อคุณต้องการดึงข้อมูลเฉพาะจาก JSON response ภาษาการเขียนโปรแกรมและเครื่องมือมากมายมี libraries ที่รองรับ JSONPath ทำให้ง่ายต่อการรวมเข้ากับโปรเจกต์ของคุณ
ตัวอย่างเช่น ใน Javascript คุณสามารถใช้ library jsonpath
:
const jsonpath = require('jsonpath');
// Sample JSON data
const data = {
movies: {
action: [
{ title: "Mad Max: Fury Road", director: "George Miller", year: 2015, rating: 8.1 },
{ title: "John Wick", director: "Chad Stahelski", year: 2014, rating: 7.4 }
],
drama: [
{ title: "The Shawshank Redemption", director: "Frank Darabont", year: 1994, rating: 9.3 },
{ title: "Forrest Gump", director: "Robert Zemeckis", year: 1994, rating: 8.8 }
],
comedy: [
{ title: "The Grand Budapest Hotel", director: "Wes Anderson", year: 2014, rating: 8.1 }
]
}
};
// Extracting titles of all drama movies
const titles = jsonpath.query(data, '$.movies.drama[*].title');
console.log(titles); // Output: ["The Shawshank Redemption", "Forrest Gump"]
ในทำนองเดียวกัน ใน Python คุณสามารถใช้ library jsonpath-ng
:
from jsonpath_ng import jsonpath, parse
# Sample JSON data
data = {
"movies": {
"action": [
{"title": "Mad Max: Fury Road", "director": "George Miller", "year": 2015, "rating": 8.1},
{"title": "John Wick", "director": "Chad Stahelski", "year": 2014, "rating": 7.4}
],
"drama": [
{"title": "The Shawshank Redemption", "director": "Frank Darabont", "year": 1994, "rating": 9.3},
{"title": "Forrest Gump", "director": "Robert Zemeckis", "year": 1994, "rating": 8.8}
],
"comedy": [
{"title": "The Grand Budapest Hotel", "director": "Wes Anderson", "year": 2014, "rating": 8.1}
]
}
}
# Extracting titles of all drama movies
jsonpath_expr = parse('$.movies.drama[*].title')
titles = [match.value for match in jsonpath_expr.find(data)]
print(titles) # Output: ["The Shawshank Redemption", "Forrest Gump"]
การใช้ JSONPath ใน Apidog

Apidog เป็นเครื่องมืออเนกประสงค์ที่ออกแบบมาเพื่อทำให้กระบวนการทำงานกับ APIs ง่ายขึ้น และรองรับ JSONPath ได้ทันที

นี่คือวิธีที่ Apidog สามารถช่วยให้คุณใช้พลังของ JSONPath ได้อย่างมีประสิทธิภาพ:
ขั้นแรก คุณจะต้องส่ง requests ไปยัง APIs ของคุณและดู responses โดยตรงด้วย Apidog จากนั้นคุณสามารถใช้อินเทอร์เฟซที่ให้มาเพื่อใช้ JSONPath query เพื่อดึงข้อมูลชื่อเรื่องของภาพยนตร์ action ทั้งหมดจาก response

จากภาพหน้าจอด้านบน คุณจะเห็นว่า (1) เราส่ง request GET
ไปยัง server ของเรา - ฉันสร้าง simple express server โดยใช้ข้อมูล JSON ที่เราได้รับด้านบนเป็น response จากนั้นฉันเปลี่ยนไปที่แท็บ Post Processors (2) และเพิ่ม process ใหม่ - Extract Variable
(3)
เมื่อคลิกที่ Extract Variable
คุณจะเห็นหน้าด้านล่าง;

คุณสามารถตั้งชื่อ variable (1) ได้หากต้องการ Variables มีประโยชน์หากคุณต้องการตรวจสอบหรือสร้าง APIs ที่แตกต่างกัน และคุณต้องการสถานที่เดียวในการจัดการ configuration ทั่วไป Variables ที่นี่เหมือนกับไฟล์ .env
ขั้นตอนอื่นคือการพิมพ์ JSONPath ที่คุณต้องการ filter ออก (2) ในกรณีของเราที่นี่ เราต้องการรับชื่อเรื่องของภาพยนตร์ใน array action ของ JSON ของเรา เมื่อคุณพิมพ์ path ปัจจุบันแล้ว ให้คลิกที่ปุ่มลูกศร (3) เพื่อเปิดหน้า response ของ query ดังที่แสดงด้านล่าง

ดังที่คุณเห็นจาก response ด้านบน Apidog ได้กรองชื่อเรื่องของภาพยนตร์ใน array action และแสดงให้เราเห็น
หากคุณต้องการลองทำสิ่งนี้ ให้ดาวน์โหลดและติดตั้ง Apidog และส่ง request แรกของคุณด้วย
บทสรุป
JSONPath เป็นเครื่องมือที่มีคุณค่าอย่างยิ่งสำหรับการนำทางและดึงข้อมูลจาก JSON responses ใน APIs มันทำให้กระบวนการทำงานกับโครงสร้าง JSON ที่ซับซ้อนง่ายขึ้น ทำให้ workflow การพัฒนาของคุณมีประสิทธิภาพมากขึ้น ด้วยการรวม JSONPath เข้ากับเครื่องมือต่างๆ เช่น Apidog คุณสามารถกรองและดึงข้อมูลที่คุณต้องการได้อย่างง่ายดาย ปรับปรุงกระบวนการทดสอบและ debugging API ของคุณ ไม่ว่าคุณจะดึงชื่อเรื่องภาพยนตร์ กรอง records เฉพาะ หรือตรวจสอบความถูกต้องของ responses JSONPath นำเสนอวิธีที่ชัดเจนและกระชับในการจัดการข้อมูล JSON ลองใช้ในโปรเจกต์ถัดไปของคุณและสัมผัสกับความเรียบง่ายที่คล่องตัวที่นำมา
```