json.dumps() 是將一個Python數據結構轉換為一個JSON編碼的字符串
json.loads() 是將一個JSON編碼的字符串轉換為一個Python數據結構
如下:
>>> import json
>>> a={'name':'xiaoming'}
>>> json.dumps(a)
'{"name": "xiaoming"}'
>>> b='{"name": "xiaoming"}'
>>> json.loads(b)
{u'name': u'xiaoming'}
注意:我們原先定義a的元素都是用單引號,而dumps轉化后都變成了雙引號,而在loads后變成python變量時,元素都變成了單引號,並且字符串前加多了個u。
那么當我定義如下的字符串類型時,元素內容用單引號,而整個字符串用雙引號括起來:
>>> c="{'name':'xiaoming'}"
>>> print json.loads(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python27/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/local/python27/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/python27/lib/python2.7/json/decoder.py", line 380, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 2 (char 1)
程序報錯了,所以
一般要求當要字符串通過loads轉為python數據類型時,得外層用單引號,里面元素key和value用雙引號
還有,即使滿足上述條件,當有u前綴的unicode出現修飾時,也會報錯:
>>> c='{u"name": u"xiaoming"}'
>>> json.loads(c)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python27/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/local/python27/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/python27/lib/python2.7/json/decoder.py", line 380, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 2 (char 1)
所以loads在處理中,還需要把里面的u前綴修飾符去掉
https://stackoverflow.com/questions/25707558/json-valueerror-expecting-property-name-line-1-column-2-char-1
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------