JSONPath શું?
JSONPath એ JSON દસ્તાવેજો માટેની એક ક્વેરી ભાષા છે, XML માટેના XPath ની JSON સમકક્ષ. Stefan Goessner એ 2007 માં તેને JSON વૃક્ષની અંદર કોઈ node તરફ પાર્સર લખ્યા વગર નિર્દેશ કરવાની ટૂંકી, વાંચી શકાય તેવી રીત તરીકે પ્રસ્તાવિત કરી. એક expression રૂટ સિલેક્ટર $ થી શરૂ થાય છે અને જ્યાં સુધી તમે ઇચ્છો તે nodes ન મળે ત્યાં સુધી property accessors, array subscripts, wildcards, recursive descent અને filter conditions ને સાંકળે છે. 2024 માં IETF એ RFC 9535 પ્રકાશિત કરીને એ syntax ને માનકીકૃત કરી જે implementations માં વિભાજિત થઈ ગઈ હતી; આ tester jsonpath-plus પર ચાલે છે, એક વ્યાપકપણે વપરાતી JavaScript implementation જે Goessner draft, મોટાભાગની RFC 9535, અને ઉપરથી થોડા extension operators આવરી લે છે.
JSONPath?
JSONPath અભિવ્યક્તિ ડાબેથી જમણે વાંચાય છે અને JSON દસ્તાવેજ ને એક પગલે ચાલે છે. દરેક પગલું અગાઉના પગલા પછી બચેલ ગાંઠોનો સમૂહ લઈ તેને વધુ સીમિત કરે છે. સંપૂર્ણ evaluation pipeline:
- રૂટ પસંદ
$સાથે anchor કરો. દરેક અભિવ્યક્તિ અહીં શરૂ થઈ ટોચ-સ્તરીય મૂલ્ય તરફ નિર્દેશ કરે છે, પછી તે ઑબ્જેક્ટ હો કે array.$આગળ વગર bare property names માન્ય JSONPath નથી. - dot notation (
$.store.book) કે bracket notation ($['store']['book']) વડે ચાઇલ્ડ members માં પ્રવેશ કરો. જ્યારે કોઈ કીમાં સ્પેસ, હાઇફન કે કોઈ એવો અક્ષર હોય જે માન્ય identifier ન હોય ત્યારે bracket notation જરૂરી છે. - Recursive descent ઑપરેટર
..વડે એક સાથે દરેક સ્તર શોધો.$..authorઅભિવ્યક્તિ વૃક્ષ ક્યાં પણ, ગમે તે ઊડાઈ પર, દરેકauthorમૂલ્ય એકત્ર કરે છે. આ તે ઑપરેટર છે જે JMESPath પાસે નથી. - Array ઘટકો ને ઇન્ડેક્સ વડે પસંદ કરો (
[0], jsonpath-plus માં છેલ્લા ઘટક માટે[-1]),[start:end]notation વડે slice કરો ([0:3]પ્રથમ ત્રણ પરત કરે છે), અથવા wildcard[*]વડે દરેક ઘટક પકડો. - elements ને
[?(...)]ની અંદર predicate વડે filter કરો. predicate ની અંદર,@વર્તમાન element નો ઉલ્લેખ કરે છે, એટલે[?(@.price<10)]માત્ર એ આઇટમ રાખે છે જેનુંpriceક્ષેત્ર 10 થી ઓછું હોય. Filters પાથના બાકીના ભાગ સાથે જોડાય છે, એટલે તમે filter કરી પછી નીચે ઊતરી શકો, કે નીચે ઊતરી પછી filter કરી શકો. - આઉટપુટ ફોર્મેટ પસંદ કરો. Values મેળ ખાતો ડેટા જ પાછો આપે છે. Paths દરેક મેળનો JSONPath પાછો આપે છે જેથી તમે જોઈ શકો કે એન્જિને શું ઉકેલ્યું. Pointers દરેક મેળ માટે સમકક્ષ RFC 6901 JSON Pointer પાછો આપે છે, જે ત્યારે ઉપયોગી છે જ્યારે ડાઉનસ્ટ્રીમ ઉપભોક્તા JSON Patch કે JSON Schema validator હોય.
આ JSONPath tester શા માટે વાપરવું?
- તમારું JSON ક્યારેય બ્રાઉઝરની બહાર જતું નથી. ક્વેરી પેજની અંદર ચાલે છે, એટલે પ્રોડક્શન fixtures, ગ્રાહક PII અને પૂર્વ-પ્રકાશન API પ્રતિસાદો તમારા મશીન પર જ રહે છે.
- એન્જિન
jsonpath-plus9.x છે, એ જ લાઇબ્રેરી જે ઘણા પ્રોડક્શન test suites અને CI assertions ને આધાર આપે છે. તમે અહીં જે પરિણામો જુઓ છો તે તમારી build pipeline જે પરિણામો જોશે તેની સાથે મેળ ખાય છે. - ત્રણ આઉટપુટ modes સામાન્ય ડાઉનસ્ટ્રીમ ઉપભોક્તાઓને આવરી લે છે: કૉપિ-પેસ્ટ માટે કાચા Values, એન્જિનનું resolution ડિબગ કરવા માટે Paths, અને JSON Patch અને JSON Schema workflows માટે RFC 6901 Pointers.
- Filter expressions
preventEval: trueસાથે ચાલે છે, એટલે પેસ્ટ કરેલી ક્વેરી હોસ્ટ પેજ સામે મનસ્વી JavaScript ચલાવી શકતી નથી. એ ત્યારે મહત્ત્વનું છે જ્યારે expression કોઈ Slack સંદેશ, Jira ટિકિટ કે સહકર્મીના ક્લિપબોર્ડમાંથી આવ્યું હોય.
JSONPath ના સામાન્ય ઉપયોગો
JSONPath જ્યાં પણ કોડને JSON પેલોડમાંથી હાથે recursive descent લખ્યા વગર કોઈ ક્ષેત્ર ખેંચવું પડે ત્યાં દેખાય છે:
- Postman tests: Postman માં Tests ટેબ
pm.response.json()ને JSONPath-શૈલીના access સાથે assertions માટે ખુલ્લું પાડે છે. ટીમો પ્રતિસાદમાંથી ક્ષેત્ર ખેંચવા અને CI માં તેના પર assert કરવા માટે$.data.user.emailજેવું એક જ expression લખે છે. - k6 load tests: k6 સ્ક્રિપ્ટ્સ
jsonpath()નેcheck()બ્લોકની અંદર call કરે છે જેથી પ્રતિસાદની બોડીમાંથી મૂલ્યો કાઢી શકાય અને SLA thresholds assert થઈ શકે. એ જ expression જે Postman માં કરાર સાબિત કરતું હતું, k6 હેઠળ load test gate કરી શકે છે. - ડેટા transforms માટે JSON DSL: AWS Step Functions states વચ્ચે event પેલોડ ફરી આકાર આપવા માટે
InputPath,ResultPathઅનેParametersની અંદર JSONPath મૂલવે છે. Argo Workflows tasks ને array પર fan-out કરવા માટેwithParamમાં JSONPath વાપરે છે. Kuberneteskubectl -o jsonpathcluster objects માંથી ક્ષેત્રો કાઢવા માટે એ જ syntax વાપરે છે.
Worked example
પ્રમાણભૂત Goessner fixture એ ચાર પુસ્તકોવાળો book store દસ્તાવેજ છે, જેમાં દરેક category, author, title અને price ધરાવે છે. એ fixture સામે, expression $.store.book[?(@.price<10)].title ત્રણ પગલાંમાં ચાલે છે. પહેલાં, $.store.book ચારેય પુસ્તકોના array માં ઉકેલાય છે. પછી, filter [?(@.price<10)] માત્ર એ એક પુસ્તક રાખે છે જેની કિંમત 10 થી ઓછી છે (8.95 પરની entry). છેલ્લે, .title એ પુસ્તકનું શીર્ષક કાઢે છે. પરિણામ ["Sayings of the Century"] છે. Paths પર સ્વિચ કરવાથી ["$['store']['book'][0]['title']"] મળે છે, અને Pointers ["/store/book/0/title"] પાછું આપે છે.
તમારા expressions અહીં પ્રોટોટાઇપ કરો, પછી તેમને સીધા Postman, k6, kubectl, કે Step Functions state machine માં મૂકો. પેસ્ટ કરો, ક્વેરી કરો, કૉપિ કરો. નેટવર્ક પરથી કંઈ જતું નથી.
JSONPath?
JSONPath એ JSON દસ્તાવેજો માટેની એક ક્વેરી ભાષા છે, XML માટેના XPath ની સમાન. Stefan Goessner એ 2007 માં તેને પ્રસ્તાવિત કરી અને IETF એ 2024 માં RFC 9535 તરીકે માનકીકૃત કરી.
તે $ (દસ્તાવેજ રૂટ) થી શરૂ થતો સઘન expression syntax વાપરે છે અને JSON વૃક્ષની અંદર nodes પસંદ કરવા માટે dot notation, array subscripts, wildcards, slices, recursive descent (..), અને filter expressions ([?(...)]) ને આધાર આપે છે.
JSONPath એ JMESPath કે jq થી કેવી રીતે અલગ છે?
ત્રણેય JSON ની ક્વેરી કરે છે, પણ તેમના grammars અને ધ્યેયો અલગ છે. JMESPath એ AWS CLI / SDK માનક છે: JSONPath કરતાં વધુ કડક, કોઈ recursive descent નહીં, અનુમાનક્ષમ side-effect-free projection માટે બનાવેલ.
jq એ Turing-complete સ્ક્રિપ્ટિંગ ભાષા છે જે JSON ની ક્વેરી જ નહીં પણ તેને transform, reduce અને stream પણ કરે છે. JSONPath તેમની વચ્ચે બેસે છે: recursive descent અને filters ને કારણે JMESPath કરતાં વધુ અભિવ્યક્ત, jq કરતાં હળવી, અને સામાન્ય-હેતુ test tooling (Postman, Playwright, REST Assured, kubectl, Step Functions) માં સૌથી વ્યાપકપણે આધારિત syntax. આ tester JSONPath ને અમલમાં મૂકે છે.
આ tester કયો dialect વાપરે છે?
આ tester jsonpath-plus 9.x ચલાવે છે. એ લાઇબ્રેરી Goessner 2007 spec ને અમલમાં મૂકે છે, મોટાભાગની RFC 9535 આવરી લે છે, અને type checks (@.string(), @.number(), @.boolean()) અને parent navigation (^) જેવા extension operators ઉમેરે છે.
preventEval: true ફ્લેગ હંમેશા સેટ હોય છે, એટલે filter predicates JavaScript eval() બિલ્ટ-ઇનને બદલે સલામત interpreter દ્વારા ચાલે છે. કોઈ પેસ્ટ કરેલી ક્વેરી આ પેજ સામે મનસ્વી કોડ ચલાવી શકતી નથી.
શું હું દરેક મેળ ખાતા મૂલ્યને અલગથી કોપી કરી શકું?
હા. Copy to clipboard બટન સંપૂર્ણ પરિણામ બ્લોકને JSON array તરીકે કૉપિ કરે છે. એક જ મૂલ્ય મેળવવા માટે, આઉટપુટ mode ને Values પર સ્વિચ કરો, પછી પરિણામ ટેક્સ્ટએરિયામાં તમને જોઈતી પંક્તિ પસંદ કરો અને તમારા બ્રાઉઝરનો સામાન્ય કૉપિ shortcut (Ctrl/Cmd + C) વાપરો.
આઉટપુટ સાદું JSON લખાણ છે, એટલે તે કોડ એડિટર, ટર્મિનલ, Postman test કે Slack સંદેશમાં સ્વચ્છ રીતે પેસ્ટ થાય છે.