前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于json.dumps中的参数,例如ensure_ascii

关于json.dumps中的参数,例如ensure_ascii

作者头像
双面人
发布2019-04-10 15:36:27
9180
发布2019-04-10 15:36:27
举报
文章被收录于专栏:热爱IT热爱IT热爱IT

通过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

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018/12/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档