zoukankan      html  css  js  c++  java
  • pyhton标准库 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
    

    1 使用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)
    
    results: 
    {"insun": "u6cf0u56e7 / u4ebau5728u56e7u90142 / Lost in Thailand "}
    {"insun": "泰囧 / 人在囧途2 / Lost in Thailand "}
    

    2 如果传入的字符串的编码不是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

    3 如果要解析的字符串,本身的编码类型不是基于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");
    
  • 相关阅读:
    在vue-cli中使用mock.js详解
    canvas水波纹效果
    echarts颜色渐变
    前端单词大全
    vue.js商城购买选择界面
    网站炫酷效果
    vue-cli中路由配置新写法
    Render函数
    XHTML与HTML的区别
    iview的table中点击Icon弹Poptip,render函数的写法
  • 原文地址:https://www.cnblogs.com/liujitao79/p/5254842.html
Copyright © 2011-2022 走看看