美文网首页Python基础
python对json的操作总结

python对json的操作总结

作者: 正经一米八 | 来源:发表于2018-12-13 12:32 被阅读0次
    Json简介
    • Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式。Json最广泛的应用是作为Ajax中服务器与客户端进行通讯的数据格式。简洁和清晰的层次结构使得Json称为理想的数据交换语言。易于人编写和阅读,同时也易于机器解析和生成,并有效地提升了网络传输效率

    • python提供了json模块,通过该模块,可以将字符串形式的json数据转化为字典,也可以将python中的字典数据转化为字符串形式的json数据。python的json模块主要包含了两个功能函数:

      • json.dumps(): 将python对象编码为json字符串

      • json.loads(): 将json字符串解码为python对象

    Python对象编码为Json对象
    • 将python对象编码为json对象,使用的是json模块中的dumps和dump函数,比较常使用的是dumps函数,它们之间的区别就是dumps将python对象编码为json对象后生成的是一个字符串,而dump则是生成一个文件流,这里以dumps函数为例进行说明,具体dumps和dump的区别见另一篇博客

    • dumps()的参数说明:

      skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key

      ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示

      indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent的数量显示前面的空白,这样打印出来的json数据也叫pretty-printed json

      separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开

      sort_keys:将数据根据keys的值进行排序

    • 实例

    python_dic1 = {'username': 'jiangnanmax', 'nickname': '江', 'major': 'CS'}
    json_dic1 = json.dumps(python_dic1)
    print(json_dic1)
    json_dic2 = json.dumps(python_dic1, sort_keys=True, indent=4, separators=(',', ': '),
                               ensure_ascii=False)
    print(json_dic2)
    
    输出如下:
    {"username": "jiangnanmax", "nickname": "\u6c5f", "major": "CS"}
    {
        "major": "CS",
        "nickname": "江",
        "username": "jiangnanmax"
    }
    
    • 观察对比上面的代码和运行结果,你会发现我定义的python对象中用的都是单引号,而经过dumps函数处理后就都变成了双引号。这是因为python中的json模块不支持使用单引号,在使用dumps函数的时候你可能不会发现有这个情况,继续往下看,在使用loads函数的时候我进行了对比
    Json对象解码为Python对象
    • 将json对象解码为python对象,使用的是json模块中的loads和load函数,它们之间的区别与dumps和dump之间的区别相同,具体见另一篇博客

    • 实例

    python_dic1 = {'username': 'jiangnanmax', 'nickname': '江', 'major': 'CS'}
    json_dic1 = json.dumps(python_dic1, ensure_ascii=False)
    print(json_dic1)
    print(type(json_dic1))
    输出:
    {"username": "jiangnanmax", "nickname": "江", "major": "CS"}
    <class 'str'>
        
    python_dic2 = json.loads(json_dic1)
    print(python_dic2)
    print(type(python_dic2))
    输出:
    {'username': 'jiangnanmax', 'nickname': '江', 'major': 'CS'}
    <class 'dict'>
        
    python_dic2 = str(python_dic2) # 把dict类型转化为str类型
    print(json.loads(python_dic2))
    报错:
    json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
    
    • 注意:使用python标准库的json解析函数json.loads是不能使用单引号引用的json字符串的,你可以改用双引号,或者在loads之前先调用json.dumps()

    相关文章

      网友评论

        本文标题:python对json的操作总结

        本文链接:https://www.haomeiwen.com/subject/nnbvhqtx.html