zoukankan      html  css  js  c++  java
  • 关于json.dumps中的参数,例如ensure_ascii

    通过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('凉凉')

    >> "u51c9u51c9"

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

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


    原文链接:https://blog.csdn.net/liangxy2014/article/details/78985057

  • 相关阅读:
    Less学习笔记
    如何在网页启动Windows服务
    让VS2010记住TFS的登陆用户名和密码
    调式WP程序报0x80131500错误的解决办法
    FizzBuzzWhizz是算法题吗?我从设计的角度去解决的。
    基于Roslyn的远程任务平台
    优雅就一个字——设计模式之数据上传接口
    关于反射优化的疑问,单次调用时直接反射要快于委托调用反射?
    用VC++11中编译libthrift项目
    grunt初体验
  • 原文地址:https://www.cnblogs.com/fcc-123/p/12294353.html
Copyright © 2011-2022 走看看