• Python学习:json对象与string相互转换教程


    首先要明确,python里有json这个库,但并没有json这个类,所以所谓的json对象本质上就是一个dict;而json这个库,用于实现dict到string、string到dict的互转。

    更具体一点,json对象(dict)转string用json.dumps(),string转json对象(dict)用json.loads()。(另外dump()是json输出到文件,load()是从文件载入成json。)

    对于哪个转哪个用哪个常弄混的问题,可以这么理解:以json为参照点,loads是向载入的动作靠向json所以是string转成json对象,所以dumps是从取出的动作远离json所以是json对象转成string。

    一、json对象(dict)转string

    1 简单地直接转换----使用json.dumps()
    import json
    
    # 变量为dict类型,亦即所谓的json对象
    json_dict = {
        "username": "root",
        "password": "toor"
    }
    
    # 变量为str类形,json对象转成的字符串
    # 值为'{"username": "root", "password": "toor"}'
    json_str = json.dumps(json_dict)
    
    # 注意如果将json_dict和json_str都使用print()直接打印出来,看不出什么区别,因为字符串类型变量print出来后最外层的引号会被脱掉
    # 唯一的区别是,打印出来的json_dict键值都使用单引号,而json_str内层使用双引号,外层使用单引号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    2 更美观地输出

    json对象或者说是dict类型变量是可以直接使用print()函数打印的,但只是那种所有key-value都打印在一行的形式。使用json.dumps()我们可以使用输出成缩进形式。

    import json
    
    # 变量为dict类型,亦即所谓的json对象
    json_dict = {
        "username": "root",
        "password": "toor"
    }
    
    # 变量为str类形,json对象转成的字符串
    # 值为'{"username": "root", "password": "toor"}'
    # json_str = json.dumps(json_dict)
    
    # indent是缩进空格数,这里4表示使用4空格缩进
    # 值为'{\n    "username": "root",    \n"password": "toor"\n}'
    json_str = json.dumps(json_dict, indent=4)
    print(json_str)
    
    # 也可以直接使用json.dump()写到文件
    # with open("test.txt", "r", encoding="utf-8") as fd:
    #     json.dump(json_dict, fd, indent=4)
    
    # logging模块也可以这样转换再打印实现缩进效果
    # json_str = json.dumps(json_dict, indent=4)
    # logging.info(json_str)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    二、string转json对象(dict)

    常规的string----指最外层是单引号,内层键值是双引号,且最后一对键值之后没有逗号的字符串。如’{“username”: “root”, “password”: “toor”}'。

    特殊的string----指最外层是双引号,内层键值是单引号,或者最一对键值之后有逗号的字符串。如"{‘username’: ‘root’, ‘password’: ‘toor’}"或’{“username”: “root”, “password”: “toor”,}'。

    如下图可以看到,对于特殊字符串如果强行使用json.loads()要将其转换成json对象,那最外层双引号或最后的逗号都会触发报错:ValueError: Expecting property name: line x column xx (char xx)
    在这里插入图片描述

    1 常规的string转json对象(dict)----使用json.loads()
    import json
    
    # 变量为str类形,待json对象的常规字符串
    json_str = '{"username": "root", "password": "toor"}'
    # Python学习交流群:711312441
    # 变量为dict类型,亦即所谓的json对象
    # {'username': 'root', 'password': 'toor'}
    json_dict = json.loads(json_str)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    2 特殊的string转json对象(dict)----使用ast.literal_eval()
    import ast
    
    # 变量为str类形,待json对象的特殊字符串
    json_str = "{'username': 'root', 'password': 'toor'}"
    # json_str = '{"username": "root", "password": "toor",}'
    # json_str = "{'username': 'root', 'password': 'toor',}"
    
    # 变量为dict类型,亦即所谓的json对象
    # {'username': 'root', 'password': 'toor'}
    json_dict = ast.literal_eval(json_str)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    云计算与大数据第11章 大数据隐私保护习题带答案
    Python常见面试题
    JS中应该注意的点
    正确主动关闭连接
    【Flink】任务调度原理、自定义数据源、基本转换算子的使用之map
    Word docx文件重命名为zip文件,解压后直接查看和编辑
    基于Java+SpringBoot+Vue物流管理小程序系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】
    C# WPF: Imag图片填充方式有哪些?
    密码学系列之:使用openssl检测网站是否支持ocsp
    淘口令解析API接口
  • 原文地址:https://blog.csdn.net/qdPython/article/details/128099724