• 【21天学习挑战赛】Python学习第二篇:json标准库


    【21天学习挑战赛】Python学习第二篇:json标准库

    活动地址:CSDN21天学习挑战赛

    ——
    JSON(JavaScript Object Notation ,对象表示法), 是一种轻量级的文本数据交换格式。

    JSON的数据格式其实就是python里面的字典格式,即大括号内存在键和值。

    其中可以包含方括号括起来的数组,也就是python里面的列表。

    ——

    特点:

    json 独立于语言
    json 具有自我描述性,更容易理解
    json 比 xml 更小,更快,更易解析
    爬虫检查会获取接口数据,接口数据就是 json 格式

    ——

    json 格式

    键值对用冒号隔开,每对键值用逗号链接。

    json的键值对的键部分,必须用双引号"包裹 (所以如果在键中出现了关键字,也被字符化了),而js中对象没有强制要求(所以在键中不允许出现关键字)。

    json数据结束后,不允许出现没有意义的逗号,如:{“name”:“admin”,“age”:18,}

    json的键值对的值部分,不允许出现函数function,undefined,NaN,但是可以有null,js中对象的值中可以出现。如{“name”:function(),“age”:undefined,“show”:NaN} 这三种情况都是错误的。

    json 对象:

    {
        "name":"小明""age":18
    }
    
    • 1
    • 2
    • 3
    • 4

    json 数组:

    {
        "student":
            [
                {"name":"小明","age":11}
                {"name":"小红","age":10}
                {"name":"小白","age":12}
            ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ——

    json 模块的使用

    json.dumps(obj): 将python数据类型转换为json格式的字符串。
    json.dump(obj, fp): 将python数据类型转换并保存到son格式的文件内。

    数据从Python转换到json格式,在数据类型上会有变化
    请添加图片描述

    json.loads(s): 将json格式的字符串转换为python的类型。
    json.load(fp): 从json格式的文件中读取数据并转换为python的类型。

    反过来,将json格式转化为python内置类型
    请添加图片描述

    ——

    json.dumps()的使用

    语法格式:
    json.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)

    import json
    
    person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}
    print(person)
    print(type(person))
    
    jsonstr = json.dumps(person)
    print(jsonstr)
    print(type(jsonstr))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    先创建一个字典, 可以看到python数据类型转换为json格式之后的区别
    python字典打印输出的键值单引号, json格式打印输出是双引号类型变为 str
    True 变为 true
    请添加图片描述

    使用参数格式化输出json字串。

    import json
    
    person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}
    jsonstr = json.dumps(person,sort_keys=True,indent=4,separators=(',',':'))
    print(jsonstr)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    sort_kyes: 是否排序
    indent: 定义缩进距离为4
    separators: 是一个元组,定义分隔符的类型(键值以冒号分隔,每个键值对以逗号分隔)通过这个参数可以修改分隔的符号
    请添加图片描述

    ——

    json.dump()的使用

    语法格式:
    json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

    import json
    
    person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}
    json.dump(person,open('data.json','w'),indent=4)
    
    • 1
    • 2
    • 3
    • 4

    查看创建好并写入的json字串的data.json 文件。
    请添加图片描述

    dump() 写入文件可以直接在里面添加参数即可写入。
    相比于 dumps() 要把json 字串写入文件的话, 需要使用.write()方法写入。如 f.write(‘data.json’,‘w’)

    ——

    json.loads()的使用

    语法格式:
    json.loads(s, *,cls=None,object_hook=None,parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

    import json
    
    person = {"name": "小明", "age": 30, "tel": ["888888", "1351111111"], "isonly": True}
    jsonstr = json.dumps(person)
    print(jsonstr)
    print(type(jsonstr))
    
    python_obj = json.loads(jsonstr)
    print(python_obj)
    print(type(python_obj))
    print("转换后字典的键:")
    print(python_obj.keys())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    json格式的字符串转换为python的类型。
    请添加图片描述

    ——

    json.load() 的使用

    语法格式:
    json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

    对文件进行操作

    import json
    
    python_obj = json.load(open('data.json','r'))
    print(python_obj)
    print(type(python_obj))
    
    • 1
    • 2
    • 3
    • 4
    • 5

    json.load() 直接读取 data.json 文件,并转换成了python的类型。
    请添加图片描述

    loads() 传的是json字符串,而 load() 传的是文件对象
    使用 loads() 时需要先读取文件在使用,如读取操作 f.read(),而 load() 则不用

    不管是dump还是load,带s的都是和字符串相关的,不带s的都是和文件相关的

    ——

  • 相关阅读:
    CoM-Px30|RK3358核心模块串口通信测试
    一个小型公司人工费用核算winform查询开发(2)
    C语言基础-typedef的用法
    跳槽!3年Java面试经验总结
    贴纸拼词问题
    计算机视觉中的对象跟踪(完整指南)
    什么是集成测试?集成测试方法有哪些?
    CentOS 7安装MySQL 8.0教程
    理财基金行情数据查询
    【Linux】进程概念
  • 原文地址:https://blog.csdn.net/Goodric/article/details/126139622