5

Google Refine 内に JSON があります - http://mapit.mysociety.org/point/4326/0.1293497,51.5464828フルバージョン用ですが、省略形は次のようになります:

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

(一意であると推定される) type を持つオブジェクトの名前のみを抽出したいWMC

Google Refine での JSON の解析は役に立ちません。これは辞書ではなく配列で動作します。

これを修正するために私が見なければならない提案はありますか?


編集:初期キーが何であるかはわかりません。それらは、事前に予測できない一意の識別子であると思います。

4

1 に答える 1

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('|')

これにより、「複数値セルの分割」を使用して分割できるパイプ区切りの名前のリストが得られます。

うまくいけば、次のリリースではもっと簡単になるでしょう!

于 2012-05-29T14:18:20.890 に答える