2009-06-24 7 views
9

Haciendo eco de mi other question ahora necesito encontrar una forma de crunch json a una línea: p.Crunching json con python

{"node0":{ 
    "node1":{ 
     "attr0":"foo", 
     "attr1":"foo bar", 
     "attr2":"value with  long  spaces" 
    } 
}} 

le gustaría hacer cálculos a una sola línea:

{"node0":{"node1":{"attr0":"foo","attr1":"foo bar","attr2":"value with  long  spaces"}}} 

mediante la eliminación de espacios en blanco insignificantes y la preservación de los que están dentro del valor. ¿Hay una biblioteca para hacer esto en Python?

EDIT Gracias drdaeman y Eli Courtwright por una respuesta súper rápida!

+1

La versión de Python que está utilizando es algo relevante aquí. json ha sido parte de la biblioteca estándar desde (creo) 2.6 – Triptych

+0

Usando Python 2.6, entonces la solución sugerida funcionó para mí genial –

Respuesta

16

http://docs.python.org/library/json.html

>>> import json 
>>> json.dumps(json.loads(""" 
... {"node0":{ 
...  "node1":{ 
...   "attr0":"foo", 
...   "attr1":"foo bar", 
...   "attr2":"value with  long  spaces" 
...  } 
... }} 
... """)) 
'{"node0": {"node1": {"attr2": "value with  long  spaces", "attr0": "foo", "attr1": "foo bar"}}}' 
+3

Oh, casi lo he olvidado ... Deberías usar '(',', ': ') 'como argumento de' separadores 'a json.dumps (ver documentación). Esto hará que los datos sean aún más compactos. – drdaeman

1

En Python 2.6:

import json 
print json.loads(json_string) 

Básicamente, cuando se utiliza el módulo de JSON para analizar JSON, entonces obtendrá un diccionario de Python. Si simplemente imprime un dict y/o lo convierte en una cadena, todo estará en una línea. Por supuesto, en algunos casos, el dict Python será ligeramente diferente de la cadena JSON codificados (por ejemplo, con booleanos y nulos), por lo que si esto importa entonces se puede decir

import json 
print json.dumps(json.loads(json_string)) 

Si usted no tiene Python 2.6 entonces puedes usar the simplejson module. En este caso, simplemente dirá

import simplejson 
print simplejson.loads(json_string) 
+3

Simplemente imprimiendo json.loads imprimirá la representación de Python de los datos, no codificada en JSON. – drdaeman