Я использую следующую библиотеку:
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