2012-05-28 2 views
5

У меня есть некоторые JSON внутри Google Refine - http://mapit.mysociety.org/point/4326/0.1293497,51.5464828 для полной версии, но сокращенное это так:Google Уточнить: перебрать словарь JSON

{1234: {'name': 'Barking', 'type': 'WMC'}, 
5678: {'name': 'England', 'type': 'EUR'} } 

Я только хочу, чтобы извлечь имя для объекта с (предположительно уникальным) типом WMC.

Parse JSON in Google Refine не помогает, это работает с массивами, а не диктов.

Любые предложения, на что я должен смотреть, чтобы исправить это?


Edit: Я не знаю, что начальные ключи: Я считаю, что они уникальные идентификаторы, которые я не могу предсказать заранее.

ответ

4

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

Трюк для получения этой работы с текущей реализацией заключается в преобразовании объекта JSON в массив JSON. Следующее выражение GREL сделает это, проанализирует результат как JSON, перебирает все элементы массива и дает вам имя типа WMC.

filter(('['+(value.replace(/"[0-9]+":/,""))[1,-1]+']').parseJson(),v,v['type']=='WMC')[0]['name'] 

Используйте это выражение с помощью команды «Добавить столбцы на основе этого столбца», чтобы создать новый столбец имен WMC. Если есть шанс, что там будет больше, чем одно имя этого типа, и вы хотите их все, вы можете добавить в цикле ForEach и присоединиться вдоль линий

forEach(filter(('['+(value.replace(/"[0-9]+":/,""))[1,-1]+']').parseJson(),v,v['type']=='WMC'),x,x['name']).join('|') 

Это даст вам трубы список разделенных имен, которые вы можете разделить, используя «Сплит многозначные ячейки».

В следующем выпуске мы сможем надеяться!

+0

Любое обновление о том, было ли это упрощено? – coreyward

+0

немного не по теме. Планируете ли вы, чтобы люди использовали простой JavaScript? с простой js-программой не более 3-х строк было бы довольно легко и просто достичь. (Кстати, вы выбрали GREL поверх простых js с некоторыми дополнительными функциями?) – opensas