Разбор JSON в Google Refine

Я пытаюсь извлечь конкретные элементы из результатов из API-интерфейса координат 2 политик данных, используя Google Refine.

Вот пример ячейки № 1:

[{"politics":[
 {"type":"admin2","friendly_type":"country","code":"usa","name":"United States"},
 {"type":"admin6","friendly_type":"county","code":"55_025","name":"Dane"},
 {"type":"constituency","friendly_type":"constituency","code":"55_02","name":"Second district, WI"},
 {"type":"admin5","friendly_type":"city","code":"55_48000","name":"Madison"},
 {"type":"admin5","friendly_type":"city","code":"55_53675","name":"Monona"},
 {"type":"admin4","friendly_type":"state","code":"us55","name":"Wisconsin"},
 {"type":"neighborhood","friendly_type":"neighborhood","code":"Eastmorland|Madison|WI","name":"Eastmorland"}
 ],"location":{"longitude":"-89.3259404","latitude":"43.0859191"}}]

Я добавил столбец на основе этого столбца, используя синтаксис GREL, чтобы вывести округ, Дейн:

value.parseJson()[0]["politics"][1]["name"]

Но когда я попал в Sample Cell #2, синтаксис больше не работает, потому что результат JSON немного отличается:

[{"politics":[
 {"type":"admin2","friendly_type":"country","code":"usa","name":"United States"},
 {"type":"constituency","friendly_type":"constituency","code":"55_05","name":"Fifth district, WI"},
 {"type":"admin4","friendly_type":"state","code":"us55","name":"Wisconsin"},
 {"type":"admin6","friendly_type":"county","code":"55_079","name":"Milwaukee"},
 {"type":"admin5","friendly_type":"city","code":"55_84675","name":"Wauwatosa"},
 {"type":"constituency","friendly_type":"constituency","code":"55_04","name":"Fourth district, WI"}
 ],"location":{"longitude":"-88.0075875","latitude":"43.0494572"}}]

Есть ли способ сортировки JSON или фразы моего синтаксиса, чтобы я мог найти округ в любом случае?

Обновить

Вот магический GREL, который позволил мне находить элементы в строке JSON по имени, а не просто по позиции:

filter(value.parseJson()[0]["politics"], item, item["type"]=="admin6")[0]["name"]

1 ответ

Решение

Поле с именем politics это массив, который вы возвращаете с:

value.parseJson()[0]["politics"]

Один элемент этого массива связан с округом (это тот, чей friendly_type поле "графство"). Так что вам нужно отфильтровать politics поле, чтобы найти тот, чей friendly_type это округ, как это:

filter(value.parseJson()[0]["politics"], item, item["friendly_type"]=="county")

Это возвращает массив с одним элементом. Вы хотите получить name поле из этого одного элемента, поэтому вам нужно извлечь name элемента нулевого массива, делая ваше полное выражение:

filter(value.parseJson()[0]["politics"], item, item["friendly_type"]=="county")[0]["name"]
Другие вопросы по тегам