我在Google Refine中有一些JSON - 完整版http://mapit.mysociety.org/point/4326/0.1293497,51.5464828,但缩写如下:
{1234: {'name': 'Barking', 'type': 'WMC'},
5678: {'name': 'England', 'type': 'EUR'} }
我只想提取具有(假定的唯一)类型WMC
的对象的名称。
Parse JSON in Google Refine没有帮助,这与数组有关,而不是dicts。
有什么建议我应该考虑解决这个问题吗?
编辑:我不知道初始密钥是什么:我相信它们是我无法提前预测的唯一标识符。
答案 0 :(得分:4)
Refine目前不知道如何遍历dict的键,其键不明(虽然我即将实现该功能)。
使用当前实现的技巧是将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('|')
这将为您提供一个管道分隔的名称列表,您可以使用“拆分多值单元格”将其拆分。
希望在下一个版本中更容易!