รับองค์ประกอบรากโดยใช้ jsonpath ตามเงื่อนไของค์ประกอบย่อย

Aug 18 2020

ฉันกำลังทำงานกับไลบรารี Jayway JsonPath เพื่อรับ 'id' ที่ถูกต้องจาก JSON ด้านล่างโดยที่phoneNumbersประเภทของฉันคือ 'iPhone'

โดยทั่วไปฉันต้องการทราบวิธีค้นหาบางสิ่งจากองค์ประกอบรากของบล็อกเมื่อระบุเงื่อนไขเฉพาะในวัตถุย่อย JSON

ฉันลองใช้นิพจน์ด้านล่างที่เลือกบล็อกที่เกี่ยวข้องกับประเภท iPhone และรายการรหัสตามลำดับ แต่ฉันไม่สามารถเข้าถึงองค์ประกอบรูทidที่เป็นของวัตถุ JSON ที่ประเภทโทรศัพท์ของฉันคือ iPhone ใครช่วยชี้แนะหน่อยได้ไหม ฉันต้องได้รับidเป็น 1 สำหรับคำถามนี้

ในการรับรายชื่อรหัส: $[*].id

ในการรับวัตถุ json ที่ตรงกับประเภท 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

ฉันคิดว่าคุณต้องการให้การแสดงออกของคุณดูลึกขึ้น

ขั้นแรกค้นหาวัตถุที่มี iPhone ในรายการหมายเลขโทรศัพท์ จากนั้นเลือกรหัส

ลอง$[?(@.phoneNumbers[*].type=="iPhone")].id.


แก้ไข

ดูเหมือนว่าไลบรารีJava JsonPath (ฉันคิดว่าคุณกำลังใช้สิ่งนี้) รองรับฟังก์ชันหลายอย่าง ไม่มีรายการ a contains()แต่คุณอาจลองใช้anyofตัวดำเนินการ:

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

โปรดทราบว่านี่เป็นการใช้งานโดยเฉพาะและอาจใช้ไม่ได้กับไลบรารีอื่น ๆ