Как получить список абсолютных путей из заданного отфильтрованного выражения JsonPath - PullRequest
1 голос
/ 08 ноября 2019

Я использую следующую библиотеку:

com.jayway.JsonPath
version 2.4.0

Я обрабатываю строку json, используя общее выражение JsonPath (отфильтрованное), и мне нужно обновить разные значения для разных совпадающих json-узлов одновременновремя, для этого мне нужен список всех совпадающих абсолютных путей.

однако я использовал этот код scala, вывод близок, но не ожидается:

val conf = Configuration.builder().options(com.jayway.jsonpath.Option.AS_PATH_LIST).build()
val pathList: net.minidev.json.JSONArray = JsonPath.using(conf).parse(str).read("$.vehicles[*].registrations.[?(@.name=='regNo')].value")

, но это возвращает:

["$['vehicles'][0]['registrations'][0]['value']","$['vehicles'][0]['registrations'][2]['value']","$['vehicles'][0]['registrations'][3]['value']"]

Ниже приведен сценарий ввода:

Вход Json

{
"id": "123",
"coverageDate": "2017-11-22",
"vehicles": [
    {
        "terms": {
            "type": "Debit",
            "holder": {
                "name": "Orix Asia Ltd"
            }
        },
        "owned": false,
        "registrations": [
            {
                "name": "regNo",
                "value": "ABC123",
                "price": 12.22
            },
            {
                "name": "abcNo",
                "value": "DEF123s",
                "price": 13.23
            },
            {
                "name": "regNo",
                "value": "XYZ123",
                "price": 12.22
            },
            {
                "name": "regNo",
                "value": "ABC123",
                "price": 12.22
            },
            {
                "name": "customNo",
                "value": "DEF123s"
            }
        ],
        "detail": {
            "region": "Custom"
        }
    }
]
}

С учетом отфильтрованного выражения JsonPath:

$.vehicles[*].registrations.[?(@.name=='regNo')].value

Запрос: как получить список всех соответствующих абсолютных путей , как показано ниже:

$.vehicles[0].registrations[0].value
$.vehicles[0].registrations[2].value
$.vehicles[0].registrations[3].value
...