博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于json.dumps中的参数,例如ensure_ascii
阅读量:6256 次
发布时间:2019-06-22

本文共 2488 字,大约阅读时间需要 8 分钟。

hot3.png

通过help(“json”) 看到里面有一个配置信息,

<span style="font-family:Microsoft YaHei;font-size:18px;">    

dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
</span>  
编码后的json格式字符串紧凑的输出,而且也没有顺序,因此dumps方法提供了一些可选的参数,让输出的格式提高可读性。 
(1)sort_keys是告诉编码器按照字典排序(a到z)输出。

import json

data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]

print 'DATA:', repr(data)

unsorted = json.dumps(data)

print 'JSON:', json.dumps(data)
print 'SORT:', json.dumps(data, sort_keys=True)
输出:

DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]

JSON: [{"a": "A", "c": 3.0, "b": [2, 4]}]
SORT: [{"a": "A", "b": [2, 4], "c": 3.0}
(2)indent参数根据数据格式缩进显示,读起来更加清晰:

indent的数值,代表缩进的位数

import json

data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]

print 'DATA:', repr(data)

print 'NORMAL:', json.dumps(data, sort_keys=True)

print 'INDENT:', json.dumps(data, sort_keys=True, indent=2)
输出:

DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]

NORMAL: [{"a": "A", "b": [2, 4], "c": 3.0}]
INDENT: [
  {
    "a": "A",
    "b": [
      2,
      4
    ],
    "c": 3.0
  }
]
(3)separators参数的作用是去掉,,:后面的空格,从上面的输出结果都能看到”, :”后面都有个空格,这都是为了美化输出结果的作用,但是在我们传输数据的过程中,越精简越好,冗余的东西全部去掉,因此就可以加上.

data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]

print 'DATA:', repr(data)
print 'repr(data)             :', len(repr(data))
print 'dumps(data)            :', len(json.dumps(data))
print 'dumps(data, indent=2)  :', len(json.dumps(data, indent=2))
print 'dumps(data, separators):', len(json.dumps(data, separators=(',',':')))
print json.dumps(data, sort_keys=True)
print json.dumps(data, sort_keys=True, separators=(',',':'))
输出结果为:

DATA: [{'a': 'A', 'c': 3.0, 'b': (2, 4)}]

repr(data)             : 35
dumps(data)            : 35
dumps(data, indent=2)  : 76
dumps(data, separators): 29
[{"a": "A", "b": [2, 4], "c": 3.0}]
[{"a":"A","b":[2,4],"c":3.0}]
(4)skipkeys参数,在encoding过程中,dict对象的key只可以是string对象,如果是其他类型,那么在编码过程中就会抛出ValueError的异常。skipkeys可以跳过那些非string对象当作key的处理.

data2 = [ { 'a':'A', 'b':(2, 4), 'c':3.0, ('d',):'D tuple' } ]

try:
    print json.dumps(data2)
except (TypeError, ValueError) as err:
    print 'ERROR:', err
print
print json.dumps(data2, skipkeys=True)

>>输出结果为:

>ERROR: keys must be a string

[{"a": "A", "c": 3.0, "b": [2, 4]}]

(5)输出真正的中文需要指定ensure_ascii=False

如果无任何配置,或者说使用默认配置, 

输出的会是‘凉凉’的ASCII字符吗,而不是真正的中文。 
这是因为json.dumps 序列化时对中文默认使用的ascii编码。

import json

print json.dumps('凉凉')

>> "\u51c9\u51c9"

想输出真正的中文需要指定ensure_ascii=False:

print json.dumps('凉凉', ensure_ascii=False)

>> 凉凉
参照: 
http://liuzhijun.iteye.com/blog/1859857
 

转载于:https://my.oschina.net/u/3371661/blog/2994827

你可能感兴趣的文章
关于CISCO asa5510防火墙端口映射配置
查看>>
monkey详细介绍之二
查看>>
Java 读取 .properties 配置文件
查看>>
取消文件默认打开方式
查看>>
echarts使用笔记四:双Y轴
查看>>
二分法查找
查看>>
不用加减乘除实现加法运算
查看>>
django 快速搭建blog
查看>>
矩阵快速幂总结
查看>>
Python 3.5 安装geohash库后import geohash失败
查看>>
基于V4L2的视频驱动开发(1)
查看>>
zoj 1008
查看>>
VC++ CArchive及简单的文件操作方法
查看>>
android中ListView数据混乱问题
查看>>
如何从零安装Mysql
查看>>
Appium简介及工作原理
查看>>
更换笔记本内存:自己动手修电脑(一)
查看>>
区分扫描枪输入和键盘输入的实现
查看>>
【mongdb主从复制和同步】
查看>>
下载文件downloadFile
查看>>