2009-06-24 8 views
9

En écho à mon other question maintenant besoin de trouver un moyen de crunch json à une ligne: par exemple.Crunching json avec python

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

aimerait crunch à une seule ligne:

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

en supprimant les espaces blancs non significatifs et préserver ceux qui sont dans la valeur. Y a-t-il une bibliothèque pour le faire en python?

EDIT Merci à drdaeman et à Eli Courtwright pour leur réponse super rapide!

+1

La version de Python que vous utilisez est quelque peu pertinente ici. json fait partie de la librairie standard depuis (je pense) 2.6 – Triptych

+0

En utilisant python 2.6, donc la solution suggérée a fonctionné pour moi génial –

Répondre

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, je l'ai presque oublié ... Vous devriez utiliser '(',', ': ') 'en tant que l'argument' separators' de json.dumps (voir la documentation). Cela rendra les données encore plus compactes. – drdaeman

1

En Python 2.6:

import json 
print json.loads(json_string) 

En fait, lorsque vous utilisez le module JSON pour analyser JSON, vous obtenez un dict Python. Si vous imprimez simplement un dict et/ou le convertissez en une chaîne, tout sera sur une ligne. Bien sûr, dans certains cas, le dict Python sera légèrement différente de celle de la chaîne codée JSON (comme avec booléens et NULL), donc si cette question est importante, alors vous pouvez dire

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

Si vous n'avez pas Python 2.6 alors vous pouvez utiliser the simplejson module. Dans ce cas, vous devez simplement dire

import simplejson 
print simplejson.loads(json_string) 
+3

L'impression de json.loads suffit pour imprimer la représentation Python des données, et non celle codée en JSON. – drdaeman