通過help(“json”) 可以參考json庫使用說明
編碼后的json格式字符串緊湊輸出,且無順序,其dumps方法提供一些可選的參數(shù),讓輸出的格式提高可讀性。
(1)sort_keys是告訴編碼器按照字典key排序(a到z)輸出。
>>> import json
>>> data = [{'c': 'C', 'b':(1, 6), 'a': 'A'}]
>>> print(data)
[{'a': 'A', 'c': 'C', 'b': (1, 6)}]
>>> print(json.dumps(data,sort_keys=True))
[{"a": "A", "b": [1, 6], "c": "C"}]
(2)indent參數(shù)根據(jù)數(shù)據(jù)格式縮進顯示,讀起來更加清晰, indent的值,代表縮進空格式:
>>> print(json.dumps(data,sort_keys=True))
[{"a": "A", "b": [1, 6], "c": "C"}]
>>> print(json.dumps(data,sort_keys=True,indent=4))
[
{
"a": "A",
"b": [
1,
6
],
"c": "C"
}
]
(3)separators參數(shù)的作用是去掉‘,’ ‘:’后面的空格,在傳輸數(shù)據(jù)的過程中,越精簡越好,冗余的東西全部去掉。
>>> print(json.dumps(data,sort_keys=True))
[{"a": "A", "b": [1, 6], "c": "C"}]
>>> print(json.dumps(data,sort_keys=True,separators=(',',':')))
[{"a":"A","b":[1,6],"c":"C"}]
(4)skipkeys參數(shù),在encoding過程中,dict對象的key只可以是string對象,如果是其他類型,那么在編碼過程中就會拋出ValueError的異常。skipkeys可以跳過那些非string對象當(dāng)作key的處理.
>>> data2 = [{"a": "A", "b": [1,6], "c": "C", ('d',): 'D'}]
>>> print(json.dumps(data2,sort_keys=True,separators=(',',':')))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/json/__init__.py", line 237, in dumps
**kw).encode(obj)
File "/usr/lib64/python2.6/json/encoder.py", line 367, in encode
chunks = list(self.iterencode(o))
File "/usr/lib64/python2.6/json/encoder.py", line 306, in _iterencode
for chunk in self._iterencode_list(o, markers):
File "/usr/lib64/python2.6/json/encoder.py", line 204, in _iterencode_list
for chunk in self._iterencode(value, markers):
File "/usr/lib64/python2.6/json/encoder.py", line 309, in _iterencode
for chunk in self._iterencode_dict(o, markers):
File "/usr/lib64/python2.6/json/encoder.py", line 268, in _iterencode_dict
raise TypeError("key {0!r} is not a string".format(key))
TypeError: key ('d',) is not a string
>>> print(json.dumps(data2,sort_keys=True,skipkeys=True))
[{"a": "A", "b": [1, 6], "c": "C"}]
(5)輸出真正的中文需要指定ensure_ascii=False
如果無任何配置,或者說使用默認(rèn)配置,
輸出的會是‘涼涼’的ASCII字符嗎,而不是真正的中文。
這是因為json.dumps 序列化時對中文默認(rèn)使用的ascii編碼。
>>> print(json.dumps('中國'))
"\u4e2d\u56fd"
>>> print(json.dumps('中國',ensure_ascii=False))
"中國"