json.dumps参数之解

通过help(“json”) 可以参考json库使用说明

编码后的json格式字符串紧凑输出,且无顺序,其dumps方法提供一些可选的参数,让输出的格式提高可读性。
(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参数根据数据格式缩进显示,读起来更加清晰, 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参数的作用是去掉‘,’ ‘:’后面的空格,在传输数据的过程中,越精简越好,冗余的东西全部去掉。

>>> 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参数,在encoding过程中,dict对象的key只可以是string对象,如果是其他类型,那么在编码过程中就会抛出ValueError的异常。skipkeys可以跳过那些非string对象当作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

如果无任何配置,或者说使用默认配置,
输出的会是‘凉凉’的ASCII字符吗,而不是真正的中文。
这是因为json.dumps 序列化时对中文默认使用的ascii编码。

>>> print(json.dumps('中国'))
"\u4e2d\u56fd"
>>> print(json.dumps('中国',ensure_ascii=False))
"中国"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,008评论 2 89
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,877评论 0 15
  • 文章图片上传不正常,如需文档,可联系微信:1017429387 目录 1 安装... 4 1.1 配置探针... ...
    Mrhappy_a7eb阅读 6,416评论 0 5
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,897评论 0 5
  • 初冬时节的清晨 是冷冽的寒风做客的时刻 它带着清脆的呼喊声 用它冷而凉的身体拥抱着大地 好似不这般就无法体现它对大...
    那花评书阅读 741评论 1 13