§

JSONPath ifodalarini sinang

Chiqarish formati:
JSONPath tezkor maʻlumotnomasi
Token Meaning
$Hujjatning ildiz elementi
@Joriy element (filtr ifodalari ichida ishlatiladi)
.Farzand operator: nomlangan farzandni tanlaydi
..Rekursiv tushish: barcha avlodlarni qidiradi
*Joker: har qanday element yoki xususiyatga mos keladi
[*]Massivning barcha elementlari
[n]n indeksidagi massiv elementi (noldan boshlanadi)
[start:end]Start-dan end-gacha (end kirmasdan) massiv kesimi
[?(@.x)]Filtr: x xususiyati mavjud elementlar
[?(@.x==1)]Filtr: x xususiyati 1 ga teng boʻlgan elementlar
[(@.length-1)]Skript ifodasi: massivning oxirgi elementi

JSONPath API shartnomasi haqiqiy yuk bilan tekshirilishi kerak boʻlgan joyda paydo boʻladi. AQSh fintech jamoalari Postman regresiya suitlarini yozib Test yorligʻida JSONPath bilan javob maydonlarini tasdiqlaydi, k6 yuk-test skriptlari check() bloklari ichida SLA chegaralarini gʻov qilish uchun API javoblaridan jsonpath() orqali qiymatlarni ajratib oladi va navbatchilikdagi SRE ish kitoblari CloudWatch JSON jurnallarini sahifalashdan oldin kesish uchun [?(@.status=="error")] kabi filtr ifodalaridan foydalanadi. Ushbu ifodalarni brauzer yorligʻida ishlatish mulkiy toʻldinma yoʻllarni, mijoz PII va ishlab chiqarishgacha boʻlgan API javoblarini har qanday joylashtirilgan soʻrov xizmatidan yiroqda ushlab turadi.

JSONPath nima?

JSONPath JSON hujjatlari uchun soʻrov tili, XML uchun XPath-ning JSON muqobili. Stefan Goessner uni 2007 yilda tahlilchi yozmasdan JSON daraxtidagi tugunga ishora qilishning qisqa, oʻqilishi mumkin boʻlgan usuli sifatida taklif qildi. Ifoda ildiz selektori $ bilan boshlanadi va siz istagan tugunlarni topib chiqqunga qadar xususiyat kirish joylari, massiv pastki indekslar, jokerlar, rekursiv tushish va filtr shartlarini zanjirlaydi. 2024 yilda IETF bajarishlar boʻyicha tarqalib ketgan sintaksisni standartlashtirish uchun RFC 9535-ni nashr qildi; bu tester jsonpath-plus-da ishlaydi.

JSONPath qanday ishlaydi

JSONPath ifodasi chapdan oʻngga oʻqiladi va JSON hujjatini bir vaqtning oʻzida bir qadam yurib oʻtadi. Har bir qadam oldingi qadamdan omon qolgan tugunlar toʻplamini oladi va uni yanada toraytiradi. Toʻliq baholash quvuri:

  1. Ildiz selektori $ bilan ankerlash. Har bir ifoda bu yerdan boshlanadi, tepadan ob’ekt yoki massiv boʻlishidan qatʼiy nazar tepadagi qiymatga ishora qiladi. Boshlovchi $ boʻlmagan yalang xususiyat nomlari toʻgʻri JSONPath emas.
  2. Nuqtali yozuv ($.store.book) yoki qavsli yozuv ($['store']['book']) bilan farzand a’zolariga kirib borish. Qavsli yozuv kalit boʻsh joy, tire yoki toʻgʻri identifikator boʻlmagan biror belgi oʻz ichiga olganida talab qilinadi.
  3. Rekursiv tushish operatori .. bilan bir vaqtning oʻzida har bir darajada qidirish. $..author ifodasi daraxtdagi chuqurlikdan qatʼiy nazar har bir author qiymatini toʻplaydi.
  4. Massiv elementlarini indeks boʻyicha tanlash ([0], jsonpath-plus-da oxirgi element uchun [-1]), [start:end] yozuvi bilan kesish yoki joker [*] bilan har bir elementni olish.
  5. [?(...)] ichidagi predikat bilan elementlarni filtrlash. Predikat ichida @ joriy elementga ishora qiladi, shuning uchun [?(@.price<10)] faqat price maydoni 10 dan kam boʻlgan elementlarni saqlaydi.
  6. Chiqarish formatini tanlash. Qiymatlar mos kelgan maʻlumotning oʻzini qaytaradi. Yoʻllar har bir moslikning JSONPath-ini qaytaradi. Pointerlar har bir moslik uchun ekvivalent RFC 6901 JSON Pointer-ini qaytaradi.

Nima uchun bu JSONPath tester-dan foydalanish kerak?

  • JSON-ingiz hech qachon brauzerdan chiqmaydi. Soʻrov sahifa ichida ishlaydi, shuning uchun ishlab chiqarish toʻldinmalar, mijoz PII va ishlab chiqarishgacha boʻlgan API javoblari mashinangizda qoladi.
  • Mexanizm — koʻplab ishlab chiqarish test suitlari va CI tasdiqlashlarini quvvatlaydigan bir xil kutubxona jsonpath-plus 9.x. Bu yerda koʻrgan natijalar qurish quvuringiz koʻradigan natijalar bilan mos keladi.
  • Uchta chiqarish rejimi keng tarqalgan downstream iste’molchilarni qamrab oladi: nusxalash-joylashtirish uchun xom Qiymatlar, dvigatelning yechimini nosozliklar bartaraf etish uchun Yoʻllar va JSON Patch va JSON Schema ish oqimlari uchun RFC 6901 Pointerlar.
  • Filtr ifodalari preventEval: true bilan ishlaydi, shuning uchun joylashtirilgan soʻrov host sahifaga ixtiyoriy JavaScript bajara olmaydi. Bu ifoda Slack xabari, Jira chiptasi yoki hamkasbning clipboard-idan kelganda muhim ahamiyatga ega.

JSONPath-ning keng tarqalgan qoʻllanishlari

JSONPath qoʻlda rekursiv tushish yozmay JSON yukidan maydon ajratib olish kerak boʻlgan har qanday joyda paydo boʻladi:

  • Postman testlari: Postman-dagi Tests yorligʻi tasdiqlashlar uchun JSONPath uslubidagi kirish bilan pm.response.json()-ni ochib beradi. Jamoalar CI-da maydonni ajratib olish va tasdiqlash uchun $.data.user.email kabi bitta ifoda yozadi.
  • k6 yuk testlari: k6 skriptlari SLA chegaralarini tasdiqlash uchun javob tanalaridan qiymatlarni ajratib olishda check() bloki ichida jsonpath()-ni chaqiradi.
  • Maʻlumotlar oʻzgartirishlari uchun JSON DSL: AWS Step Functions holatlar orasida hodisa yukini qayta shakllantirish uchun InputPath, ResultPath va Parameters ichida JSONPath-ni baholaydi. kubectl -o jsonpath klaster ob’ektlaridan maydonlarni ajratib olish uchun bir xil sintaksisdan foydalanadi.

Ishlangan misol

Kanonik Goessner toʻldinmasi toʻrtta kitobli kitob doʻkoni hujjati boʻlib, har birida category, author, title va price mavjud. Shu toʻldirmaga nisbatan $.store.book[?(@.price<10)].title ifodasi uch qadamda ishlaydi. Avval $.store.book barcha toʻrtta kitob massivini yechadi. Keyin [?(@.price<10)] filtri 10 dan past narxlangan (8.95 narxdagi yozuv) faqat bitta kitobni saqlaydi. Nihoyat .title shu kitobning nomini ajratib oladi. Natija ["Sayings of the Century"]. Yoʻllar-ga oʻtish ["$['store']['book'][0]['title']"]-ni qaytaradi va Pointerlar ["/store/book/0/title"]-ni qaytaradi.

Ifodalaringizni bu yerda prototiplang, keyin ularni bevosita Postman, k6, kubectl yoki Step Functions holat mashinasiga tashlang. Joylashtirib, soʻrov yuboring va nusxalang. Hech narsa tarmoqdan oʻtmaydi.

JSONPath nima?

JSONPath JSON hujjatlari uchun soʻrov tili boʻlib, XML uchun XPath-ga oʻxshash. Stefan Goessner tomonidan 2007 yilda taklif qilingan va 2024 yilda IETF tomonidan RFC 9535 sifatida standartlashtirilgan. U $ (hujjat ildizi) dan boshlanadigan ixcham ifoda sintaksisidan foydalanadi va JSON daraxtidagi tugunlarni tanlash uchun nuqtali yozuv, massiv pastki indekslar, jokerlar, kesimlar, rekursiv tushish (..) va filtr ifodalari ([?(...)])-ni qoʻllab-quvvatlaydi.

JSONPath JMESPath yoki jq-dan qanday farq qiladi?

Uchala JSON soʻrov tili, lekin ularning grammatikalari va maqsadlari boshqacha. JMESPath AWS CLI / SDK standarti: JSONPath-dan qatʼiyroq, rekursiv tushish yoʻq, bashorat qilinadigan yon ta’sirlarisiz proyeksiya uchun qurilgan. jq nafaqat JSON soʻrov yuborgan balki uni oʻzgartiradigan, qisqartiradigan va uzatadigan Tyuring-toʻliq skript tili. JSONPath ular oʻrtasida joylashgan: rekursiv tushish va filtrlar tufayli JMESPath-dan koʻra ifodaliroq, jq-dan yengilroq va umumiy maqsadli test vositalarida eng koʻp qoʻllab-quvvatlanadigan sintaksis. Bu tester JSONPath-ni amalga oshiradi.

Bu tester qaysi lahjani ishlatadi?

Bu tester jsonpath-plus 9.x-da ishlaydi. Shu kutubxona Goessner 2007 spetsifikatsiyasini amalga oshiradi, RFC 9535-ning koʻp qismini qamrab oladi va type tekshiruvi (@.string(), @.number(), @.boolean()) va ota navigatsiya (^) kabi kengaytma operatorlar qoʻshadi. preventEval: true bayrogʻi har doim oʻrnatilgan, shuning uchun filtr predikatlar JavaScript eval() oʻrnatilgan funksiyasi oʻrniga xavfsiz interpretor orqali ishlaydi.

Alohida mos kelgan qiymatlarni nusxalab olish mumkinmi?

Ha. Clipbordga nusxalash tugmasi JSON massivi sifatida toʻliq natija blokini nusxalaydi. Bitta qiymatni olish uchun chiqarish rejimini Qiymatlar-ga almashtiring, natija textarea-dagi kerakli qatorni tanlang va brauzeringizning oddiy nusxalash yorliqidan foydalaning (Ctrl/Cmd + C). Natija oddiy JSON matni, shuning uchun kod muharriri, terminal, Postman testi yoki Slack xabari ga toza joylashtiriladi.