उप तत्वों की स्थिति के आधार पर jsonpath का उपयोग करके मूल तत्व प्राप्त करें

Aug 18 2020

मैं JSON के नीचे से सही 'id' प्राप्त करने के लिए Jayway JsonPath लाइब्रेरी के साथ काम कर रहा हूँ जहाँ मेरा phoneNumbersप्रकार 'iPhone' है।

सामान्य तौर पर, मैं यह जानना चाहूंगा कि जब उप-जोंस ऑब्जेक्ट्स में एक विशिष्ट स्थिति निर्दिष्ट की जाती है, तो किसी ब्लॉक के मूल तत्व से कुछ कैसे पाया जाए।

मैंने नीचे उन अभिव्यक्तियों की कोशिश की जो iPhone प्रकार से संबंधित ब्लॉक का चयन करते हैं और क्रमशः आईडी की सूची भी, लेकिन मैं idJSON ऑब्जेक्ट से संबंधित मूल तत्व को प्राप्त करने में सक्षम नहीं हूं जहां मेरा फोन प्रकार iPhone है। क्या कोई मेरा मार्गदर्शन कर सकता है? मुझे idइस प्रश्न के लिए 1 प्राप्त करने की आवश्यकता है ।

आईडी की सूची प्राप्त करने के लिए: $[*].id

IPhone प्रकार के लिए इसी ऑब्जेक्ट को प्राप्त करने के लिए: $[*].phoneNumbers[?(@.type=='iPhone')]

[
    {
        "id": "1",
        "phoneNumbers": [
            {
                "type": "iPhone",
                "number": "0123-4567-8888"
            },
            {
                "type": "home",
                "number": "0123-4567-8910"
            }
        ]
    },
    {
        "id": "2",
        "phoneNumbers": [
            {
                "type": "x",
                "number": "0123-4567-8888"
            },
            {
                "type": "y",
                "number": "0123-4567-8910"
            }
        ]
    }
]

जवाब

gregsdennis Oct 06 2020 at 03:16

मुझे लगता है कि आप चाहते हैं कि आपकी अभिव्यक्ति गहरी दिखे।

सबसे पहले, उन वस्तुओं को ढूंढें जिनके पास फोन नंबर सूची में आईफोन है। फिर बस आईडी चुनें।

कोशिश करो $[?(@.phoneNumbers[*].type=="iPhone")].id


संपादित करें

यह जावा JsonPath लाइब्रेरी जैसा लगता है (मुझे लगता है कि आप इसका उपयोग कर रहे हैं) कई कार्यों का समर्थन करता है। यह एक सूची नहीं है contains(), लेकिन आप anyofऑपरेटर की कोशिश कर सकते हैं :

$[?(@.phoneNumbers[*].type anyof ["iPhone"])].id

ध्यान दें कि यह निश्चित रूप से कार्यान्वयन-विशिष्ट है और संभवतः किसी अन्य पुस्तकालय के साथ काम नहीं करेगा।