JSONPath అంటే ఏమిటి?
JSONPath అనేది JSON డాక్యుమెంట్ల కోసం ఒక క్వెరీ లాంగ్వేజ్, XML కోసం XPath యొక్క JSON సమానం. Stefan Goessner 2007 లో దీన్ని JSON ట్రీలో నోడ్ను పార్సర్ వ్రాయకుండా చూపించడానికి చదవగలిగే సంక్షిప్త మార్గంగా ప్రతిపాదించారు. ఒక ఎక్స్ప్రెషన్ రూట్ సెలెక్టర్ $ తో ప్రారంభమవుతుంది మరియు మీకు కావాల్సిన నోడ్లు పికప్ అయ్యే వరకు ప్రాపర్టీ యాక్సెసర్లు, అరే సబ్స్క్రిప్ట్లు, వైల్డ్కార్డ్లు, రికర్సివ్ డిసెంట్, మరియు ఫిల్టర్ కండిషన్లు చైన్ చేస్తుంది. 2024 లో IETF అమలులలో విభజనపోయిన సింటాక్స్ను ప్రామాణికీకరించడానికి RFC 9535 ప్రచురించింది; ఈ టెస్టర్ jsonpath-plus పై నడుస్తుంది, Goessner డ్రాఫ్ట్, RFC 9535 యొక్క చాలా భాగాన్ని, మరియు పైన కొన్ని ఎక్స్టెన్షన్ ఆపరేటర్లు కవర్ చేసే విస్తృతంగా ఉపయోగించే JavaScript అమలు.
JSONPath ఎలా పనిచేస్తుంది
JSONPath ఎక్స్ప్రెషన్ ఎడమ నుండి కుడికి చదువుతుంది మరియు JSON డాక్యుమెంట్ను ఒక్కో అడుగు నడుస్తుంది. ప్రతి అడుగు మునుపటి అడుగు నుండి బతికిన నోడ్ల సెట్ తీసుకుంటుంది మరియు దాన్ని మరింత ఇరుకు చేస్తుంది. పూర్తి మూల్యాంకన పైప్లైన్:
- రూట్ సెలెక్టర్
$తో యాంకర్ చేయండి. ప్రతి ఎక్స్ప్రెషన్ ఇక్కడ ప్రారంభమవుతుంది, అగ్రస్థాయి విలువను చూపిస్తుంది, అది ఆబ్జెక్ట్ అయినా అరే అయినా. ముందు$లేకుండా బేర్ ప్రాపర్టీ పేర్లు చెల్లుబాటైన JSONPath కాదు. - డాట్ నొటేషన్ (
$.store.book) లేదా బ్రాకెట్ నొటేషన్ ($['store']['book']) తో చైల్డ్ మెంబర్లలోకి వాక్ చేయండి. కీ స్పేస్, హైఫన్, లేదా చెల్లుబాటైన ఐడెంటిఫైయర్ కాని ఏ అక్షరాన్ని కలిగి ఉన్నప్పుడు బ్రాకెట్ నొటేషన్ అవసరం. - రికర్సివ్ డిసెంట్ ఆపరేటర్
..తో ప్రతి స్థాయిలో ఒకేసారి శోధించండి. ఎక్స్ప్రెషన్$..authorలోతుతో సంబంధం లేకుండా చెట్టు అంతటా ప్రతిauthorవిలువ సేకరిస్తుంది. ఇది JMESPath కి లేని ఆపరేటర్. - ఇండెక్స్ ద్వారా అరే ఎలిమెంట్లు పికప్ చేయండి (
[0],[-1]jsonpath-plus లో చివరి ఐటెమ్ కోసం), వాటిని[start:end]నొటేషన్ తో స్లైస్ చేయండి ([0:3]మొదటి మూడు తిరిగి ఇస్తుంది), లేదా వైల్డ్కార్డ్[*]తో ప్రతి ఎలిమెంట్ పట్టుకోండి. [?(...)]లోపల ప్రిడికేట్తో ఎలిమెంట్లు ఫిల్టర్ చేయండి. ప్రిడికేట్ లోపల,@ప్రస్తుత ఎలిమెంట్ను సూచిస్తుంది, కాబట్టి[?(@.price<10)]priceఫీల్డ్ 10 కంటే తక్కువగా ఉన్న ఐటెమ్లను మాత్రమే ఉంచుతుంది. ఫిల్టర్లు పాత్లో మిగతా వాటితో కాంపోజ్ అవుతాయి, కాబట్టి మీరు ఫిల్టర్ చేసి తర్వాత డిసెండ్ చేయవచ్చు, లేదా డిసెండ్ చేసి తర్వాత ఫిల్టర్ చేయవచ్చు.- ఔట్పుట్ ఫార్మాట్ ఎంచుకోండి. విలువలు మ్యాచ్ చేసిన డేటాను ఇస్తుంది. పాత్లు ఇంజిన్ రిజల్వ్ చేసిన దాన్ని చూడటానికి ప్రతి మ్యాచ్ యొక్క JSONPath తిరిగి ఇస్తుంది. పాయింటర్లు ప్రతి మ్యాచ్ కోసం సమానమైన RFC 6901 JSON పాయింటర్ తిరిగి ఇస్తుంది, డౌన్స్ట్రీమ్ కన్స్యూమర్ JSON Patch లేదా JSON Schema వ్యాలిడేటర్ అయినప్పుడు ఉపయోగపడుతుంది.
ఈ JSONPath టెస్టర్ ఎందుకు ఉపయోగించాలి?
- మీ JSON బ్రౌజర్ వదలదు. క్వెరీ పేజీలోపలే నడుస్తుంది, కాబట్టి ప్రొడక్షన్ ఫిక్చర్లు, కస్టమర్ PII, మరియు ప్రీ-రిలీజ్ API రెస్పాన్స్లు మీ మెషీన్లో ఉంటాయి.
- ఇంజిన్
jsonpath-plus9.x, అనేక ప్రొడక్షన్ టెస్ట్ సూట్లు మరియు CI అస్సర్షన్లకు బ్యాకింగ్ ఇచ్చే అదే లైబ్రరీ. మీరు ఇక్కడ చూసే ఫలితాలు మీ బిల్డ్ పైప్లైన్ చూసే ఫలితాలకు సరిపోతాయి. - మూడు ఔట్పుట్ మోడ్లు సాధారణ డౌన్స్ట్రీమ్ కన్స్యూమర్లను కవర్ చేస్తాయి: కాపీ-పేస్ట్ కోసం రా విలువలు, ఇంజిన్ రిజల్యూషన్ డీబగ్గింగ్ కోసం పాత్లు, మరియు JSON Patch మరియు JSON Schema వర్క్ఫ్లోల కోసం RFC 6901 పాయింటర్లు.
- ఫిల్టర్ ఎక్స్ప్రెషన్లు
preventEval: trueతో నడుస్తాయి, కాబట్టి పేస్ట్ చేసిన క్వెరీ హోస్ట్ పేజీపై ఏకపక్ష JavaScript నిర్వహించలేదు. Slack మేసేజ్, Jira టికెట్, లేదా సహోద్యోగి క్లిప్బోర్డ్ నుండి ఎక్స్ప్రెషన్ వచ్చినప్పుడు ఇది ముఖ్యమవుతుంది.
JSONPath యొక్క సాధారణ అప్లికేషన్లు
కోడ్ JSON పేలోడ్ నుండి ఒక ఫీల్డ్ తీయాల్సిన చోట JSONPath కనిపిస్తుంది:
- Postman టెస్టులు: Postman లో Tests ట్యాబ్
pm.response.json()ని JSONPath-స్టైల్ యాక్సెస్తో అస్సర్షన్ల కోసం ఎక్స్పోజ్ చేస్తుంది. టీమ్లు$.data.user.emailవంటి ఒకే ఎక్స్ప్రెషన్ వ్రాసి రెస్పాన్స్ నుండి ఫీల్డ్ పులుచుకుంటాయి మరియు CI లో అస్సర్ట్ చేస్తాయి. - k6 లోడ్ టెస్టులు: k6 స్క్రిప్ట్లు రెస్పాన్స్ బాడీల నుండి విలువలు వెలికి తీయడానికి మరియు
check()బ్లాక్లలో SLA థ్రెషోల్డ్లు అస్సర్ట్ చేయడానికిcheck()బ్లాక్ లోపలjsonpath()పిలుస్తాయి. Postman లో ఒక కాంట్రాక్ట్ నిరూపించిన అదే ఎక్స్ప్రెషన్ k6 కింద లోడ్ టెస్ట్ గేట్ చేయవచ్చు. - డేటా ట్రాన్స్ఫార్మ్ల కోసం JSON DSL: AWS Step Functions
InputPath,ResultPath, మరియుParametersలోపల JSONPath ని మూల్యాంకనం చేసి స్టేట్ల మధ్య ఈవెంట్ పేలోడ్లు రీషేప్ చేస్తుంది. Argo WorkflowswithParamలో JSONPath ఉపయోగించి అరేపై టాస్క్లు ఫ్యాన్-అవుట్ చేస్తుంది. Kuberneteskubectl -o jsonpathక్లస్టర్ ఆబ్జెక్ట్ల నుండి ఫీల్డ్లు వెలికి తీయడానికి అదే సింటాక్స్ ఉపయోగిస్తుంది.
పని చేసిన ఉదాహరణ
కానోనికల్ Goessner ఫిక్చర్ నాలుగు పుస్తకాలతో ఉన్న బుక్ స్టోర్ డాక్యుమెంట్, ప్రతిది category, author, title, మరియు price కలిగి ఉంటుంది. ఆ ఫిక్చర్పై ఎక్స్ప్రెషన్ $.store.book[?(@.price<10)].title మూడు దశలలో నడుస్తుంది. మొదట, $.store.book అన్ని నాలుగు పుస్తకాల అరేకి రిజల్వ్ అవుతుంది. తర్వాత, ఫిల్టర్ [?(@.price<10)] 10 కంటే తక్కువ ధర ఉన్న ఒక పుస్తకాన్ని మాత్రమే ఉంచుతుంది (8.95 వద్ద ఎంట్రీ). చివరగా, .title ఆ పుస్తకం యొక్క శీర్షిక వెలికి తీస్తుంది. ఫలితం ["Sayings of the Century"]. పాత్లకు మారడం ["$['store']['book'][0]['title']"] తిరిగి ఇస్తుంది, మరియు పాయింటర్లు ["/store/book/0/title"] తిరిగి ఇస్తుంది.
మీ ఎక్స్ప్రెషన్లు ఇక్కడ ప్రొటోటైప్ చేయండి, అప్పుడు వాటిని నేరుగా Postman, k6, kubectl, లేదా Step Functions స్టేట్ మషీన్లో వేయండి. పేస్ట్ చేయండి, క్వెరీ చేయండి, కాపీ చేయండి. నెట్వర్క్ దాటదు.
JSONPath అంటే ఏమిటి?
JSONPath అనేది JSON డాక్యుమెంట్ల కోసం ఒక క్వెరీ లాంగ్వేజ్, XML కోసం XPath మాదిరిగా. Stefan Goessner 2007 లో ప్రతిపాదించారు మరియు IETF 2024 లో RFC 9535 గా ప్రామాణికీకరించింది.
ఇది $ (డాక్యుమెంట్ రూట్) తో ప్రారంభమయ్యే కాంపాక్ట్ ఎక్స్ప్రెషన్ సింటాక్స్ ఉపయోగిస్తుంది మరియు JSON ట్రీలో నోడ్లు సెలెక్ట్ చేయడానికి డాట్ నొటేషన్, అరే సబ్స్క్రిప్ట్లు, వైల్డ్కార్డ్లు, స్లైస్లు, రికర్సివ్ డిసెంట్ (..), మరియు ఫిల్టర్ ఎక్స్ప్రెషన్లు ([?(...)]) సపోర్ట్ చేస్తుంది.
JSONPath JMESPath లేదా jq నుండి ఎలా భిన్నంగా ఉంటుంది?
మూడూ JSON ని క్వెరీ చేస్తాయి, కానీ వాటి వ్యాకరణాలు మరియు లక్ష్యాలు భిన్నంగా ఉంటాయి. JMESPath AWS CLI / SDK స్టాండర్డ్: JSONPath కంటే కఠినంగా, రికర్సివ్ డిసెంట్ లేదు, అంచనా వేయగల సైడ్-ఎఫెక్ట్-ఫ్రీ ప్రొజెక్షన్ కోసం నిర్మించబడింది.
jq JSON ని క్వెరీ చేయడమే కాదు ట్రాన్స్ఫార్మ్, రిడ్యూస్, మరియు స్ట్రీమ్ చేసే Turing-కంప్లీట్ స్క్రిప్టింగ్ లాంగ్వేజ్. JSONPath వాటి మధ్య కూర్చుంది: రికర్సివ్ డిసెంట్ మరియు ఫిల్టర్ల కారణంగా JMESPath కంటే ఎక్కువ ఎక్స్ప్రెసివ్, jq కంటే తేలికైనది, మరియు జనరల్-పర్పస్ టెస్ట్ టూలింగ్లో (Postman, Playwright, REST Assured, kubectl, Step Functions) అత్యంత విస్తృతంగా సపోర్ట్ చేయబడిన సింటాక్స్. ఈ టెస్టర్ JSONPath అమలు చేస్తుంది.
ఈ టెస్టర్ ఏ మాండలికం ఉపయోగిస్తుంది?
ఈ టెస్టర్ jsonpath-plus 9.x నడిపిస్తుంది. ఆ లైబ్రరీ Goessner 2007 స్పెక్ అమలు చేస్తుంది, RFC 9535 యొక్క చాలా భాగాన్ని కవర్ చేస్తుంది, మరియు టైప్ చెక్లు (@.string(), @.number(), @.boolean()) మరియు పేరెంట్ నావిగేషన్ (^) వంటి ఎక్స్టెన్షన్ ఆపరేటర్లు జోడిస్తుంది.
preventEval: true ఫ్లాగ్ ఎల్లప్పుడూ సెట్ చేయబడుతుంది, కాబట్టి ఫిల్టర్ ప్రిడికేట్లు JavaScript eval() బిల్ట్-ఇన్ బదులు సురక్షిత ఇంటర్ప్రెటర్ ద్వారా నడుస్తాయి. పేస్ట్ చేసిన క్వెరీ ఈ పేజీపై ఏకపక్ష కోడ్ నిర్వహించలేదు.
నేను వ్యక్తిగత మ్యాచ్డ్ విలువలు కాపీ చేయగలనా?
అవును. క్లిప్బోర్డ్కు కాపీ చేయండి బటన్ పూర్తి ఫలిత బ్లాక్ను JSON అరేగా కాపీ చేస్తుంది. ఒకే విలువ పట్టుకోవడానికి, ఔట్పుట్ మోడ్ను విలువలుకు మార్చండి, అప్పుడు ఫలిత టెక్స్ట్ఏరియాలో మీకు కావాల్సిన లైన్ ఎంచుకుని మీ బ్రౌజర్ సాధారణ కాపీ షార్ట్కట్ (Ctrl/Cmd + C) ఉపయోగించండి.
ఔట్పుట్ సాదా JSON వచనం, కాబట్టి ఇది కోడ్ ఎడిటర్, టెర్మినల్, Postman టెస్ట్, లేదా Slack మేసేజ్లో క్లీన్గా పేస్ట్ అవుతుంది.