2012-12-18 10 views
12

Sto inviando una stringa JSON da Objective-C a Python. Quindi voglio rompere il contenuto della stringa in una lista Python. Sto cercando di iterare su una stringa (qualsiasi stringa per ora):Python: stringa JSON a elenco di dizionari - Errore durante l'iterazione

import json 

s = '[{"i":"imap.gmail.com","p":"[email protected]"},{"i":"imap.aol.com","p":"anoterPass"}]' 
jdata = json.loads(s) 
for key, value in jdata.iteritems(): 
    print key, value 

ottengo questo errore:

Exception Error: 'list' object has no attribute 'iterates'

risposta

15

I dati JSON è un elenco di dizionari, così dopo json.loads(s) si avrà jdata come una lista, non un dizionario.

provare qualcosa di simile al seguente:

import json 

s = '[{"i":"imap.gmail.com","p":"[email protected]"},{"i":"imap.aol.com","p":"anoterPass"}]' 
jdata = json.loads(s) 
for d in jdata: 
    for key, value in d.iteritems(): 
     print key, value 
4

json.loads(s) lo restituisca list. Per iterare su di esso non è necessario iteritems.

>>> jdata = json.loads(s) 
>>> for doc in jdata: 
...  for key, value in doc.iteritems(): 
...   print key, value 
+1

È 'don't' bisogno iteritems? Ma la tua soluzione lo contiene. – Pyderman

0

per sopra Python 3.6, ci deve una piccola differenza

s = '[{"i":"imap.gmail.com","p":"[email protected]"},{"i":"imap.aol.com","p":"anoterPass"}]' 
jdata = json.loads(s) 
print (jdata) 
for d in jdata: 
    for key, value in d.items(): 
     print (key, value) 


[{'i': 'imap.gmail.com', 'p': '[email protected]'}, {'i': 'imap.aol.com', 'p': 'anoterPass'}] 
i imap.gmail.com 
p [email protected] 
i imap.aol.com 
p anoterPass 
Problemi correlati