2012-05-28 40 views
5

Tengo un poco de JSON dentro de Google Refinar - http://mapit.mysociety.org/point/4326/0.1293497,51.5464828 para la versión completa, pero abreviado es como esto:Google Filtrar: iterar sobre un diccionario JSON

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

sólo quiero extraer el nombre del objeto con el tipo (supuestamente único) WMC.

Parse JSON in Google Refine no ayuda, eso está funcionando con matrices, no dicts.

¿Alguna sugerencia de lo que debería estar mirando para arreglar esto?


Editar: No sé lo que las claves iniciales son: creo que son identificadores únicos que no puedo predecir de antemano.

Respuesta

4

Actualmente, Refine no sabe cómo iterar a través de las claves de un dict donde se desconocen las claves (aunque estoy a punto de implementar esa funcionalidad).

El truco para hacer que esto funcione con la implementación actual es convertir el objeto JSON en una matriz JSON. La siguiente expresión GREL hará eso, analizará el resultado como JSON, repetirá a través de todos los elementos de la matriz y le dará el primer nombre de tipo 'WMC'.

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

Utilice esa expresión con el comando "Agregar columna en función de esta columna" para crear una nueva columna de nombre de WMC. Si hay una posibilidad de que habrá más de un nombre de este tipo y desea que todo, se puede añadir en un bucle foreach y unirse a lo largo de las líneas de

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

Esto le dará una lista tubería separada de nombres que puede dividir usando "Dividir celdas multivaluadas".

¡Será más fácil en el próximo lanzamiento con suerte!

+0

¿Alguna actualización sobre si esto se ha simplificado? – coreyward

+0

ligeramente fuera de tema. ¿Estás planeando dejar que las personas usen JavaScript simple? con un programa js simple de no más de 3 líneas, sería bastante fácil y simple de lograr. (Por cierto, ¿por qué elegiste GREL sobre js simples con algunas funciones adicionales?) – opensas

Cuestiones relacionadas