2012-05-28 9 views
5

Ho un po 'JSON all'interno di Google Refine - http://mapit.mysociety.org/point/4326/0.1293497,51.5464828 per la versione completa, ma abbreviata è come questo:Google Refine: iterare su un dizionario JSON

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

voglio solo estrarre il nome per l'oggetto con il tipo (presunto unico) WMC.

Parse JSON in Google Refine non aiuta, funziona con gli array, non con i dicts.

Qualche suggerimento su cosa dovrei guardare per risolvere questo problema?


Edit: Non so che cosa i tasti iniziali sono: Credo che sono identificatori univoci che non posso prevedere prima del tempo.

risposta

4

Perfeziona attualmente non è in grado di scorrere le chiavi di un comando in cui le chiavi sono sconosciute (anche se sto per implementare tale funzionalità).

Il trucco per ottenere questo funzionamento con l'implementazione corrente è convertire l'oggetto JSON in un array JSON. La seguente espressione GREL lo farà, analizzerà il risultato come JSON, itererà attraverso tutti gli elementi dell'array e ti darà il primo nome di tipo 'WMC'.

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

Utilizzare tale espressione con il comando "Aggiungi colonna in base a questa colonna" per creare una nuova colonna del nome WMC. Se c'è una possibilità che ci sarà più di un nome di questo tipo e si desidera che tutti, è possibile aggiungere in un ciclo foreach e unisciti lungo le linee di

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

Questo vi darà una lista tubazione separata di nomi che puoi scomporre utilizzando "Dividi celle multivalore".

Sarà più facile nella prossima versione, si spera!

+0

Qualsiasi aggiornamento sul fatto che sia stato reso più semplice? – coreyward

+0

leggermente fuori tema. Stai pianificando di permettere alle persone di usare semplicemente JavaScript? con un semplice programma js di non più di 3 linee sarebbe abbastanza facile e semplice da raggiungere. (A proposito, come hai scelto GREL su plain js con alcune funzioni aggiunte?) – opensas

Problemi correlati