2010-04-19 4 views
3

J'utilise JSON et jsonpickle parfois sérialisation des objets à des fichiers, en utilisant la fonction suivante:sérialisation fichiers JSON avec les nouvelles lignes en Python

def json_serialize(obj, filename, use_jsonpickle=True): 
    f = open(filename, 'w') 
    if use_jsonpickle: 
    import jsonpickle 
    json_obj = jsonpickle.encode(obj) 
    f.write(json_obj) 
    else: 
    simplejson.dump(obj, f) 
    f.close() 

Le problème est que si je sérialiser un dictionnaire par exemple, en utilisant « json_serialize (mydict, myfilename) "alors la sérialisation entière se met sur une ligne. Cela signifie que je ne peux pas grep le fichier pour les entrées à inspecter à la main, comme je le ferais un fichier CSV. Y a-t-il un moyen de faire en sorte que chaque élément d'un objet (par exemple chaque entrée d'un dict, ou chaque élément d'une liste) soit placé sur une ligne distincte dans le fichier de sortie JSON?

merci.

Répondre

3

(simple)json.dump() a l'argument indent. jsonpickle a probablement quelque chose de similaire, ou dans le pire des cas vous pouvez le décoder et l'encoder à nouveau.

2

Jsonpickle utilise l'un des backends JSON et vous pouvez essayer ceci à votre code:

jsonpickle.set_encoder_options('simplejson', sort_keys=True, indent=4) 
Questions connexes