2015-12-18 1 views
2

Par exemple, je config.json:python vidage JSON sans perdre le formatage

{ 
    "param.a"  : 0.5, 
    "param.basic" : ["x", "y"], 

    "x.y.z"  : [1, 2, 3] 
} 

le charger et enregistrer dans un autre fichier:

import json 
import collections 
j = json.load(open('config.json'), object_pairs_hook=collections.OrderedDict) 
json.dump(j, open('new.json', 'w'), indent=4) 

Regardez à new.json:

{ 
    "param.a": 0.5, 
    "param.basic": [ 
     "x", 
     "y" 
    ], 
    "x.y.z": [ 
     1, 
     2, 
     3 
    ] 
} 

Est-ce un moyen simple de m ake new.json formatage (espaces, tabulations, retours à la ligne) comme à config.json?

Répondre

0

Peut-être que vous pouvez utiliser collections.OrderedDict pour un tri personnalisé de votre json.

your_json = [OrderedDict(sorted(item.iteritems(), key=lambda (k, v): sort_order.index(k))) 
       for item in allsites] 

et après

json.dumps(your_json, indent=4, separators=(',', ': ')) 
+0

Merci, mais je l'utilise déjà, cela n'affecte pas les espaces, les onglets et les retours à la ligne. –

0

Lorsque vous json.load() quelque chose, il devient un dict. Une dict n'a pas de concept d'espacement, donc vous ne pourrez pas utiliser directement json.dump() pour y parvenir. Vous pouvez, bien sûr, analyser le fichier manuellement et compter le nombre d'espaces pour chaque clé. Ensuite, vous pouvez l'écrire manuellement ligne par ligne.

+0

Oui, c'est clair. Mais peut-être que quelqu'un l'a déjà fait? :) –

+0

Désolé, pas familier avec une telle mise en œuvre (recherché un peu et n'a rien trouvé). En outre, l'implémentation d'une analyse de ligne un-par-un rendra l'analyse et l'écriture plutôt lentes. – nir0s