• json utf8


    python中自带了处理python的模块,使用时候直接import json即可。
    使用loads方法即可将json字符串转换成python对象,对应关系如下:
    JSON Python
    object dict
    array list
    string unicode
    number (int) int, long
    number (real) float
    true True
    false False
    null None

    一。但在使用json模块的时候需要注意的是对中文的处理,loads方法如果传入的字符串的编码不是UTF-8的话,需要用encoding指定字符编码


    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    import json
    js = json.loads('{"insun": "泰囧 / 人在囧途2 / Lost in Thailand "}')
    print json.dumps(js)
    print json.dumps(js,ensure_ascii=False)



    {"insun": "u6cf0u56e7 / u4ebau5728u56e7u90142 / Lost in Thailand "}
    {"insun": "泰囧 / 人在囧途2 / Lost in Thailand "}

    二。如果传入的字符串的编码不是UTF-8的话,需要用encoding指定字符编码

    对于:

    dataDict = json.loads(dataJsonStr);

    其中dataJsonStr是json字符串,如果其编码本身是非UTF-8的话,比如是GB2312的,那么上述代码,就会导致出错。改为对应的:

    dataDict = json.loads(dataJsonStr, encoding="GB2312");

    就可以了。

    此处,即对应着上面函数解释中的:

    If s is a str instance and is encoded with an ASCII based encoding other than UTF-8 (e.g. latin-1), then an appropriate encoding name must be specified

    三。如果要解析的字符串,本身的编码类型,不是基于ASCII的,那么,调用json.loads之前,需要先将对应字符串,转换为Unicode类型的

    还是以上述的:

    dataDict = json.loads(dataJsonStr, encoding="GB2312");

    为 例,即使你此处的字符串dataJsonStr,已经通过encoding指定了合适的编码,但是由于其中,包含了其他的编码的字符,比如我本身 dataJsonStr是GB2312的字符,但是其中又包含了的一些日文字符,此时,json.loads还是会出错,因为此处的 dataJsonStr不是以ASCII为基础的字符编码,所以,需要先去将dataJsonStr转换为Unicode,然后再调用 json.loads,就可以了。

    代码如下:

    dataJsonStrUni = dataJsonStr.decode("GB2312");
    dataDict = json.loads(dataJsonStrUni, encoding="GB2312");



    官网:

    18.2. json — JSON encoder and decoder

    http://docs.python.org/2/library/json.html

    json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
    json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])



    参考:

    python json 中文
    Python JSON模块解码中文的BUG
    http://www.douban.com/note/214822809/

    使用python处理json
    http://www.giser.net/?p=990

    python下调用json.dumps中文显示问题解决办法
    http://blog.csdn.net/sagittar/article/details/6169605

    Python解析json数据结构范例
    http://hi.baidu.com/leejun_2005/item/fc688affc196f8723c198b7c

    Python中json.loads解析包含 的字符串会出错
    http://www.crifan.com/use_python_json_loads_parse_string_contain_newline_will_fail_error/
  • 相关阅读:
    Django学习案例一(blog):四. 使用Admin
    Django学习案例一(blog):三. 模型生成数据
    Django学习案例一(blog):二. 连接数据库
    连接Xively云
    undefined reference to `_sbrk', `_write', `_lseek', `_read'
    Android manifest
    关于android socket出现at java.net.DatagramSocket java.net.BindException at libcore.io.IoBridge.bind(IoBridge.java:89)等waring
    virtual box Failed to load unit ""pgm" 的error
    Lwip lwip_recvfrom函数一个数据包不能分多次读取。
    获取Window下的文件缩略图
  • 原文地址:https://www.cnblogs.com/li-baibo/p/3948551.html
Copyright © 2020-2023  润新知