§

JSONPath اظہارات ٹیسٹ کریں

آؤٹ پٹ فارمیٹ:
JSONPath فوری حوالہ
Token Meaning
$دستاویز کا root عنصر
@موجودہ عنصر (filter اظہارات کے اندر استعمال ہوتا ہے)
.Child member operator: ایک نامی child منتخب کرتا ہے
..Recursive descent: تمام descendants میں تلاش کرتا ہے
*Wildcard: کسی بھی عنصر یا property سے میل کھاتا ہے
[*]array کے تمام items
[n]Index n پر array عنصر (zero-based)
[start:end]start سے end تک (end شامل نہیں) array slice
[?(@.x)]Filter: وہ items جہاں property x موجود ہو
[?(@.x==1)]Filter: وہ items جہاں property x کی قیمت 1 ہو
[(@.length-1)]Script اظہار: array کا آخری عنصر

JSONPath وہاں ظاہر ہوتا ہے جہاں API contract کو real payload کے خلاف جانچنا ہو۔ Pakistan اور دیگر جگہوں پر Postman regression suites لکھنے والی fintech ٹیمیں Test tab میں JSONPath سے response fields assert کرتی ہیں، k6 load-test scripts jsonpath() سے API responses سے values نکال کر SLA thresholds gate کرتی ہیں، اور SRE on-call runbooks [?(@.status=="error")] جیسے filter expressions CloudWatch JSON logs کو page کرنے سے پہلے slice کرنے کے لیے استعمال کرتے ہیں۔ ان اظہارات کو browser tab میں چلانے سے proprietary fixture payloads، customer PII اور pre-release API responses کسی hosted query service تک نہیں پہنچتے۔

JSONPath کیا ہے؟

JSONPath JSON دستاویزوں کے لیے ایک query language ہے، XML کے لیے XPath کا JSON equivalent۔ Stefan Goessner نے 2007 میں اسے JSON tree کے اندر کسی node کی طرف مختصر، قابلِ پڑھ طریقے سے اشارہ کرنے کے لیے پیش کیا بغیر parser لکھے۔ ایک اظہار root selector $ سے شروع ہوتا ہے اور property accessors، array subscripts، wildcards، recursive descent اور filter conditions کو chain کرتا ہے جب تک وہ nodes نہ چن لے جو آپ چاہتے ہیں۔ 2024 میں IETF نے RFC 9535 شائع کی تاکہ اس syntax کو standardise کیا جائے جو implementations میں الگ ہو گئی تھی؛ یہ tester jsonpath-plus پر چلتا ہے، ایک widely used JavaScript implementation جو Goessner draft، RFC 9535 کا زیادہ تر حصہ، اور اس کے اوپر چند extension operators cover کرتا ہے۔

JSONPath کیسے کام کرتا ہے؟

ایک JSONPath اظہار بائیں سے دائیں پڑھتا ہے اور ایک JSON دستاویز میں ایک قدم بہ قدم چلتا ہے۔ ہر قدم ان nodes کا مجموعہ لیتا ہے جو پچھلے قدم میں بچے اور انہیں مزید محدود کرتا ہے۔ پوری evaluation pipeline:

  1. root selector $ سے لنگر ڈالیں۔ ہر اظہار یہاں سے شروع ہوتا ہے، top-level value کی طرف اشارہ کرتے ہوئے، چاہے وہ object ہو یا array۔ leading $ کے بغیر bare property names درست JSONPath نہیں ہیں۔
  2. dot notation ($.store.book) یا bracket notation ($['store']['book']) سے child members میں جائیں۔ Bracket notation ضروری ہے جب key میں اسپیس، hyphen یا کوئی ایسا character ہو جو valid identifier نہیں ہے۔
  3. recursive descent operator .. سے بیک وقت ہر سطح میں تلاش کریں۔ اظہار $..author tree میں کہیں بھی ہر author value اکٹھا کرتا ہے، گہرائی سے قطع نظر۔ یہ وہ operator ہے جو JMESPath میں نہیں ہے۔
  4. index سے array elements چنیں ([0]، jsonpath-plus میں آخری item کے لیے [-1][start:end] notation سے slice کریں ([0:3] پہلے تین لوٹاتا ہے)، یا wildcard [*] سے ہر element لیں۔
  5. [?(...)] کے اندر predicate سے elements فلٹر کریں۔ predicate کے اندر، @ موجودہ element سے مراد ہے، اس لیے [?(@.price<10)] صرف وہ items رکھتا ہے جن کی price field 10 سے کم ہو۔ Filters باقی path کے ساتھ مل کر کام کرتے ہیں، اس لیے آپ filter کے بعد descend یا descend کے بعد filter کر سکتے ہیں۔
  6. آؤٹ پٹ فارمیٹ چنیں۔ Values matched data خود لوٹاتا ہے۔ Paths ہر match کا JSONPath لوٹاتا ہے تاکہ آپ دیکھ سکیں کہ engine نے کیا resolve کیا۔ Pointers ہر match کے لیے مساوی RFC 6901 JSON Pointer لوٹاتا ہے، مفید جب downstream consumer JSON Patch یا JSON Schema validator ہو۔

یہ JSONPath tester کیوں استعمال کریں؟

  • آپ کا JSON براؤزر کبھی نہیں چھوڑتا۔ query صفحے کے اندر چلتی ہے، اس لیے production fixtures، customer PII اور pre-release API responses آپ کی مشین پر رہتے ہیں۔
  • engine jsonpath-plus 9.x ہے، وہی لائبریری جو بہت سے production test suites اور CI assertions کی بنیاد ہے۔ آپ یہاں جو نتائج دیکھتے ہیں وہی آپ کی build pipeline دیکھے گی۔
  • تین آؤٹ پٹ modes عام downstream consumers cover کرتے ہیں: copy-paste کے لیے raw Values، engine کی resolution debug کرنے کے لیے Paths، اور JSON Patch اور JSON Schema workflows کے لیے RFC 6901 Pointers۔
  • Filter اظہارات preventEval: true کے ساتھ چلتے ہیں، اس لیے ایک pasted query host page کے خلاف arbitrary JavaScript execute نہیں کر سکتی۔ یہ اہم ہے جب اظہار Slack message، Jira ticket یا کسی ساتھی کے clipboard سے آیا ہو۔

JSONPath کے عام استعمالات

JSONPath وہاں ظاہر ہوتا ہے جہاں code کو ہاتھ سے recursive descent لکھے بغیر JSON payload سے field نکالنی ہو:

  • Postman tests: Postman میں Tests tab JSONPath-style access کے ساتھ pm.response.json() expose کرتا ہے۔ ٹیمیں $.data.user.email جیسا ایک اظہار لکھتی ہیں response سے field نکالنے اور CI میں assert کرنے کے لیے۔
  • k6 load tests: k6 scripts response bodies سے values نکالنے اور SLA thresholds assert کرنے کے لیے check() block کے اندر jsonpath() call کرتے ہیں۔ وہی اظہار جس نے Postman میں contract ثابت کیا k6 کے تحت load test gate کر سکتا ہے۔
  • JSON DSL data transforms کے لیے: AWS Step Functions states کے درمیان event payloads reshape کرنے کے لیے InputPath، ResultPath اور Parameters کے اندر JSONPath evaluate کرتا ہے۔ Argo Workflows tasks کو array پر fan-out کرنے کے لیے withParam میں JSONPath استعمال کرتا ہے۔ Kubernetes kubectl -o jsonpath cluster objects سے fields نکالنے کے لیے یہی syntax استعمال کرتا ہے۔

عملی مثال

canonical Goessner fixture کتاب کی دکان کی دستاویز ہے جس میں چار کتابیں ہیں، ہر ایک میں category، author، title اور price ہے۔ اس fixture کے خلاف، اظہار $.store.book[?(@.price<10)].title تین مراحل میں چلتا ہے۔ پہلے، $.store.book تمام چار کتابوں کی array resolve کرتا ہے۔ پھر، filter [?(@.price<10)] صرف وہ ایک کتاب رکھتا ہے جس کی قیمت 10 سے کم ہے (8.95 والی entry)۔ آخر میں، .title اس کتاب کا title نکالتا ہے۔ نتیجہ ["Sayings of the Century"] ہے۔ Paths پر switch کرنے سے ["$['store']['book'][0]['title']"] ملتا ہے، اور Pointers سے ["/store/book/0/title"]۔

اپنے اظہارات یہاں prototype کریں، پھر انہیں براہ راست Postman، k6، kubectl یا Step Functions state machine میں ڈالیں۔ Paste کریں، query کریں، کاپی کریں۔ کچھ بھی network عبور نہیں کرتا۔

JSONPath کیا ہے؟

JSONPath JSON دستاویزوں کے لیے ایک query language ہے، XML کے لیے XPath سے مشابہ۔ Stefan Goessner نے 2007 میں پیش کیا اور IETF نے 2024 میں RFC 9535 کے طور پر standardise کیا، یہ $ (دستاویز root) سے شروع ہونے والی compact اظہار syntax استعمال کرتا ہے اور JSON tree کے اندر nodes منتخب کرنے کے لیے dot notation، array subscripts، wildcards، slices، recursive descent (..) اور filter اظہارات ([?(...)]) سپورٹ کرتا ہے۔

JSONPath JMESPath یا jq سے کیسے مختلف ہے؟

تینوں JSON query کرتے ہیں، لیکن ان کی grammars اور اہداف مختلف ہیں۔ JMESPath AWS CLI / SDK معیار ہے: JSONPath سے زیادہ سخت، کوئی recursive descent نہیں، predictable side-effect-free projection کے لیے بنا۔ jq ایک Turing-complete scripting language ہے جو نہ صرف JSON query بلکہ transform، reduce اور stream کرتی ہے۔ JSONPath ان کے درمیان ہے: recursive descent اور filters کی بدولت JMESPath سے زیادہ expressive، jq سے ہلکا، اور general-purpose test tooling (Postman، Playwright، REST Assured، kubectl، Step Functions) میں سب سے زیادہ سپورٹڈ syntax۔ یہ tester JSONPath implement کرتا ہے۔

یہ tester کون سا dialect استعمال کرتا ہے؟

یہ tester jsonpath-plus 9.x چلاتا ہے۔ وہ لائبریری Goessner 2007 spec implement کرتی ہے، RFC 9535 کا زیادہ تر حصہ cover کرتی ہے، اور type checks (@.string()، @.number()، @.boolean()) اور parent navigation (^) جیسے extension operators شامل کرتی ہے۔ preventEval: true flag ہمیشہ set رہتا ہے، اس لیے filter predicates JavaScript eval() built-in کی بجائے safe interpreter سے چلتے ہیں۔ ایک pasted query اس صفحے کے خلاف arbitrary code execute نہیں کر سکتی۔

کیا میں انفرادی matched values کاپی کر سکتا ہوں؟

جی ہاں۔ کلپ بورڈ پر کاپی کریں بٹن مکمل result block کو JSON array کے طور پر copy کرتا ہے۔ ایک single value لینے کے لیے، آؤٹ پٹ mode کو Values پر switch کریں، پھر result textarea میں وہ سطر منتخب کریں جو آپ چاہتے ہیں اور اپنے browser کی عام copy shortcut (Ctrl/Cmd + C) استعمال کریں۔ آؤٹ پٹ plain JSON text ہے، اس لیے code editor، terminal، Postman test یا Slack message میں صاف paste ہوتا ہے۔