• Json格式解析


    Json格式介绍

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言的文本格式来存储和表示数据。JSON易于人阅读和编写,同时也易于机器解析和生成。

    JSON格式的基本结构是基于两种类型的值:

    简单值:这些包括字符串、数字、布尔值(true 或 false)、null、JSON数组(由方括号 [] 包围的值的列表)和JSON对象(由大括号 {} 包围的键值对的列表)。
    
    复合值:JSON对象和JSON数组可以用来组合简单值和复合值以创建更复杂的数据结构。
    
    • 1
    • 2
    • 3

    JSON对象

    JSON对象是一个无序的键值对集合,其中每个键都是一个字符串,每个值都可以是一个简单值或另一个JSON对象或JSON数组。

    {
      "key1": "value1",
      "key2": 123,
      "key3": true,
      "key4": null,
      "key5": [1, 2, 3],
      "key6": {
        "nestedKey1": "nestedValue1",
        "nestedKey2": "nestedValue2"
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    JSON数组

    JSON数组是一个有序的值列表,用方括号包围。数组中的每个值都可以是一个简单值或另一个JSON对象或JSON数组。

    [
      "value1",
      123,
      true,
      null,
      {
        "key1": "value1",
        "key2": "value2"
      },
      [1, 2, 3]
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    字符串

    JSON中的字符串必须使用双引号(")包围,而不是单引号(')。

    {
      "name": "John Doe",
      "greeting": "Hello, world!"
    }
    
    • 1
    • 2
    • 3
    • 4

    数字

    JSON支持整数和浮点数。

    {
      "age": 30,
      "score": 9.8
    }
    
    • 1
    • 2
    • 3
    • 4

    布尔值

    JSON中的布尔值只能是 true 或 false。

    {
      "isStudent": true,
      "hasGraduated": false
    }
    
    • 1
    • 2
    • 3
    • 4

    Null

    JSON中的 null 值表示空或不存在的值。

    {
      "address": null
    }
    
    • 1
    • 2
    • 3

    JSON格式简洁清晰,易于阅读和编写,因此在Web开发中广泛用作前后端数据交换的格式。在Python、JavaScript、Java、C#等许多编程语言中都有现成的库或函数来处理JSON数据的编码(序列化)和解码(反序列化)。

    python中json模块的使用

    在Python中,json模块是用于处理JSON数据的标准库。你可以使用它来将Python对象编码(或序列化)成JSON格式的字符串,也可以将JSON格式的字符串解码(或反序列化)成Python对象。以下是json模块的一些基本用法示例:
    编码(序列化)

    将Python对象(如字典、列表、字符串、数字等)转换为JSON格式的字符串。

    import json
    
    # Python字典
    data = {
        "name": "John",
        "age": 30,
        "city": "New York"
    }
    
    # 使用json.dumps()将Python对象编码为JSON字符串
    json_string = json.dumps(data)
    
    print(json_string)
    # 输出: {"name": "John", "age": 30, "city": "New York"}
    
    # 你可以使用参数来定制输出的JSON字符串,比如缩进以增加可读性
    pretty_json_string = json.dumps(data, indent=4)
    
    print(pretty_json_string)
    # 输出:
    # {
    #     "name": "John",
    #     "age": 30,
    #     "city": "New York"
    # }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    解码(反序列化)

    将JSON格式的字符串转换为Python对象(如字典、列表等)。

    import json
    
    # JSON字符串
    json_string = '{"name": "John", "age": 30, "city": "New York"}'
    
    # 使用json.loads()将JSON字符串解码为Python对象
    data = json.loads(json_string)
    
    print(data)
    # 输出: {'name': 'John', 'age': 30, 'city': 'New York'}
    
    # 你可以看到解码后的数据是一个Python字典
    print(type(data))
    # 输出: 
    
    # 如果JSON字符串表示一个数组,解码后将得到Python列表
    json_array_string = '[1, 2, 3, "four"]'
    data_array = json.loads(json_array_string)
    
    print(data_array)
    # 输出: [1, 2, 3, 'four']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    写入文件

    将Python对象编码为JSON格式,并写入到文件中。

    import json
    
    data = {
        "name": "John",
        "age": 30,
        "city": "New York"
    }
    
    # 使用with语句打开文件,并将数据写入到文件中
    with open('data.json', 'w') as f:
        json.dump(data, f)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    从文件读取

    从文件中读取JSON数据,并解码为Python对象。

    import json
    
    # 使用with语句打开文件,并读取数据
    with open('data.json', 'r') as f:
        data = json.load(f)
    
    print(data)
    # 输出: {'name': 'John', 'age': 30, 'city': 'New York'}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    错误处理

    当处理JSON数据时,可能会遇到格式错误或无法序列化的对象。为了避免程序崩溃,你可以使用try和except语句来捕获可能抛出的异常。

    import json
    
    try:
        # 尝试解码一个格式错误的JSON字符串
        data = json.loads('{"name": "John", "age": "thirty"}')
    except json.JSONDecodeError as e:
        print(f"解码错误: {e}")
    
    try:
        # 尝试序列化一个无法序列化的对象,如包含datetime的复杂对象
        complex_data = {"name": "John", "timestamp": datetime.datetime.now()}
        json.dumps(complex_data)
    except TypeError as e:
        print(f"序列化错误: {e}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在使用json模块时,确保你的数据是可以被序列化的,并且JSON字符串的格式是正确的,否则你可能会遇到错误。

  • 相关阅读:
    《自然语言处理》复习
    Java 值传递
    python脚本打包apk-上传到内测平台-企业微信通知
    【Serverless】Unity快速集成认证服务实现邮件登录
    ChatGPT第五讲
    PSINS中19维组合导航模块sinsgps详解(时间同步部分)
    RuntimeError: PyPI no longer supports ‘pip search‘ (or XML-RPC search).
    “蔚来杯“2022牛客暑期多校训练营4 E: Jobs (Hard Version)
    IDEA 2019 Springboot 3.1.3 运行异常
    DSPE-PEG-iRGD,iRGD-PEG-DSPE,磷脂-聚乙二醇-靶向肽iRGD,一种磷脂PEG肽
  • 原文地址:https://blog.csdn.net/d710055071/article/details/136770564