Jsonpath: фильтр по значению в массиве
Я пытаюсь фильтровать по значению массив в моем Json с помощью Jsonpath. Я хочу получить long_name страны в JSON ниже. Для этого я фильтрую adress_components по типам[0] = = "country", но это, похоже, не работает.
JsonPath, который я пробовал:
$.results[0].address_components[?(@['types'][0]=="country")].long_name
результат, который я хочу: "Канада".
JSON:
{
"results" : [
{
"address_components" : [
{
"long_name" : "5510-5520",
"short_name" : "5510-5520",
"types" : [ "street_number" ]
},
{
"long_name" : "Yonge Street",
"short_name" : "Yonge St",
"types" : [ "route" ]
},
{
"long_name" : "Willowdale",
"short_name" : "Willowdale",
"types" : [ "neighborhood", "political" ]
},
{
"long_name" : "North York",
"short_name" : "North York",
"types" : [ "political", "sublocality", "sublocality_level_1" ]
},
{
"long_name" : "Toronto",
"short_name" : "Toronto",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Toronto Division",
"short_name" : "Toronto Division",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Ontario",
"short_name" : "ON",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "Canada",
"short_name" : "CA",
"types" : [ "country", "political" ]
},
{
"long_name" : "M2N 5S3",
"short_name" : "M2N 5S3",
"types" : [ "postal_code" ]
}
]
}
],
"status" : "OK"
}
Спасибо за вашу помощь.
1 ответов
будет работать следующий JSONPath:
$..address_components[?(@.types[0] == 'country')].long_name
ломая его:
-
$..address_components
: фокус наaddress_components
массив -
[?(@.types[0] == 'country')]
найтиaddress_components
sub документ, имеющий атрибут типа с именем "type", содержащий массив, первое значение которого является"country" -
.long_name
: возвратитьlong_name
атрибут этого документа sub.
проверил с помощью Jayway Jsonpath Оценщик и в Java:
JSONArray country = JsonPath.parse(json)
.read("$..address_components[?(@.types[0] == 'country')].long_name");
// prints Canada
System.out.println(country.get(0));