janeh
janeh

Reputation: 3814

Python: JSON string to list of dictionaries - Getting error when iterating

I am sending a JSON string from Objective-C to Python. Then I want to break contents of the string into a Python list. I am trying to iterate over a string (any string for now):

import json

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

I get this error:

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

Upvotes: 20

Views: 66737

Answers (3)

xiyurui
xiyurui

Reputation: 241

for python 3.6 above, there has a little difference

s = '[{"i":"imap.gmail.com","p":"someP@ss"},{"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': 'someP@ss'}, {'i': 'imap.aol.com', 'p': 'anoterPass'}]
i imap.gmail.com
p someP@ss
i imap.aol.com
p anoterPass

Upvotes: 3

Andrew Clark
Andrew Clark

Reputation: 208665

Your JSON data is a list of dictionaries, so after json.loads(s) you will have jdata as a list, not a dictionary.

Try something like the following:

import json

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

Upvotes: 28

Oleksii Kachaiev
Oleksii Kachaiev

Reputation: 6232

json.loads(s) will return you list. To iterate over it you don't need iteritems.

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

Upvotes: 5

Related Questions