json in python
dictionary
add key:value pair to a dictionary
>>> newdict = {}
>>> newdict['foo'] = "bar"
>>> newdict
{'foo': 'bar'}
get all keys or values of a dictionary
>>> newdict.keys()
['foo']
>>> newdict.values()
['bar']
get a value for a key from a dictionary
>>> newdict['foo']
'bar'
>>> newdict.get("foo")
'bar'
add a dictionary as a value
>>> newdict0 = {}
>>> newdict0["mykey"] = newdict
>>> newdict0
{'mykey': {'foo': 'bar'}}
get a value
>>> newdict0['mykey']['foo']
'bar'
add a list as a value
>>> newdict0["mykey"] = [newdict, {'hoge': 'piyo'}]
>>> newdict0
{'mykey': [{'foo': 'bar'}, {'hoge': 'piyo'}]}
get a list
>>> for dict in newdict0.get('mykey'):
... print dict
...
{'foo': 'bar'}
{'hoge': 'piyo'}
json
dump dictionary as json format string
>>> import json
>>> mystr = json.dumps(newdict)
>>> mystr
'{"foo": "bar"}'
load json format string to dictionary
>>> mydict = json.loads(mystr)
>>> mydict
{u'foo': u'bar'}
>>> mydict.get("foo")
u'bar'
To show non-ASCII characters, we can use ensure_ascii=False option, otherwise the output are escaped with \uXXXX sequences
$ python26
>>> import json
>>> mystr = '{"foo":"ばぁ"}'
>>> mydict = json.loads(mystr)
>>>
>>> print(json.dumps(mydict))
{"foo": "\u3070\u3041"}
>>>
>>> print(json.dumps(mydict, ensure_ascii=False))
{"foo": "ばぁ"}
>>>
If locale is not UTF-8, we will met UnicodeEncodeError when it prints UTF-8 strings to stdout. In this case, we can use encode() to avoid the error.
$ LANG=C python26
>>> import json
>>> mystr = '{"foo":"ばぁ"}'
>>> mydict = json.loads(mystr)
>>>
>>> print(json.dumps(mydict))
{"foo": "\u3070\u3041"}
>>>
>>> print(json.dumps(mydict, ensure_ascii=False))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 14-15: ordinal not in range(128)
>>>
>>> print(json.dumps(mydict, ensure_ascii=False).encode('utf-8'))
{"foo": "ばぁ"}
>>>
write json to a file
mystr = '{"foo":"ばぁ"}
mydict = json.loads(mystr)
with open('new.json', 'w') as f:
json.dump(mydict, f)
read json from a file
with open('new.json') as f:
myjson = json.load(f)
print(json.dumps(myjson, ensure_ascii=False).encode('utf-8'))
sample script
using urllib2 library
similar as above but using reauests library