2014-09-25 16 views
15

Ho un problema di conversione Object istanze da JSON:elenco di oggetti da JSON con Python

ob = Object() 

list_name = scaping_myObj(base_url, u, number_page) 

for ob in list_name: 
    json_string = json.dumps(ob.__dict__) 
    print json_string 

In list_name Ho un elenco di Object istanze.

json_string ritorno, ad esempio:

{"city": "rouen", "name": "1, 2, 3 Soleil"} 
{"city": "rouen", "name": "Maman, les p'tits bateaux"} 

Ma vorrei solo 1 stringa JSON con tutte le informazioni in un elenco:

[{"city": "rouen", "name": "1, 2, 3 Soleil"}, {"city": "rouen", "name": "Maman, les p'tits bateaux"}] 
+0

Vuoi dire che si desidera un elenco JSON? –

+0

Qui ho 2 JSON quindi voglio solo una con tutte le informazioni come [{ "città": "Rouen", "name": "1, 2, 3 Soleil"}, { "città": "Rouen", " nome ":" Maman, les p'tits bateaux "}] – pedro

risposta

43

È possibile utilizzare un elenco di comprensione per produrre un elenco di dizionari, quindi convertire che:

json_string = json.dumps([ob.__dict__ for ob in list_name]) 

o utilizzare un default funzione; json.dumps() chiamerà per nulla che non può puntate:

def obj_dict(obj): 
    return obj.__dict__ 

json_string = json.dumps(list_name, default=obj_dict) 

Quest'ultimo lavori per oggetti inseriti, a qualsiasi livello della struttura, non solo nelle liste.

+0

la tua prima soluzione funziona perfettamente. Grazie mille :) – pedro

+0

Sembra un'ottima soluzione. Al momento sto cercando di eliminare una struttura dati complessa e questa potrebbe essere la strada da percorrere. – Matthias

+0

Non ho provato la seconda soluzione, perché la vostra prima soluzione ha funzionato per me :) – Roon13

2

Un'altra possibile soluzione a questo problema è jsonpickle che può essere utilizzato per trasformare qualsiasi oggetto Python in JSON (non solo semplici elenchi).

Dal jsonpickle home page:

jsonpickle è una libreria Python per la serializzazione e deserializzazione di oggetti Python complessi da e JSON. Il pitone librerie standard per la codifica Python in JSON, come json del stdlib, simplejson e demjson, può gestire solo primitive Python che hanno una diretta JSON equivalente (ad esempio dicts, liste, stringhe, interi, ecc). jsonpickle si basa sulla parte superiore di queste librerie e permette più complesse strutture di dati essere serializzato per JSON. jsonpickle è altamente configurabile ed estendibile -permettendo all'utente di scegliere il backend JSON e aggiungere backend aggiuntivi.

Esecuzione di una trasformazione è semplice:

import jsonpickle 

class JsonTransformer(object): 
    def transform(self, myObject): 
     return jsonpickle.encode(myObject, unpicklable=False) 
Problemi correlati