python 解读JSON文件,一文搞懂!

一、JSON格式详解

        所有 JSON 数据需要包裹在一个花括号中。

{
    "sites": [
    { "name":"maybe" , "url":"www.maybe.com" }, 
    { "name":"google" , "url":"www.google.com" }
    ]
}
  • Object(对象):键/值对("key":"value")的集合。集合使用花括号{ }定义。多个键/值对之间使用逗号,分隔,例如{"name":"pink","url":"unknown"}
  • Array(数组):值的有序集合,使用方括号[ ]定义,数组中每个值之间使用逗号 ,进行分隔。
  • 1. 基本语法

  • 值可以是数字、字符串、布尔值、数组、对象、null;
  • 键必须是唯一的,不能重复;
  • 不可以使用八进制或十六进制表示数字。
  • 不支持注释
  • 可以嵌套
  • 2. 数据类型

            number:JSON 中不区分整型和浮点型。此外,JSON 中不能使用八进制和十六进制表示数字,但可以使用 e 或 E 来表示 10 的指数。

    {
        "number_1" : 20,
        "number_2" : -21.5,
        "number_3" : 1.0E+1
    }  

            value:null 和 true/false

            object:JSON 中,对象由花括号{ }以及其中的若干键/值对组成,一个对象中可以包含零个或多个键/值对,每个键/值对之间需要使用逗号,分隔.

    {
        "author": {
            "name": "C",
            "description": "C语言"
        }
    }

            array:JSON 中,数组由方括号[ ]和其中的若干值组成,值可以是 JSON 中支持的任意类型,每个值之间使用逗号,进行分隔。

    {
        "course" : [
            "JSON",
            "CSS",
            {
                "ok" : "well",
                "how" : "fine"
            },
            [
                3.1,
                fasle
            ],
            null
        ]
    }

    二、python

    1. 数据文件(data.json)

    {
        "employee": {
            "name": "John Doe",
            "age": 35,
            "department": {
                "name": "Engineering",
                "location": "Building A"
            }
        }
    }
    

    2.原生python解析

            需要导入JSON包进行文件解析。

    import json
    
    # 读取 JSON 数据
    with open('data/data.json', 'r') as f:
        json_data = f.read()
    
    # 解析 JSON 数据
    data = json.loads(json_data)
    print(type(data))  # dict
    
    for key, value in data.items():  # 遍历第一层
        print(f"Key: {key}, Value: {value}")
        # 如果值是字典,继续遍历第二层
        if isinstance(value, dict):
            for sub_key, sub_value in value.items():  # 遍历第二层
                print(f"  Sub-key: {sub_key}, Sub-value: {sub_value}")
                # 如果第二层的值还是字典,进一步处理
                if isinstance(sub_value, dict):
                    for deep_key, deep_value in sub_value.items():
                        print(f"    Deep-key: {deep_key}, Deep-value: {deep_value}")

    3. pandas

            需要导入pandas包进行文件解析。

    import pandas as pd
    
    path = 'data/data.json'
    
    # 1. 打开并读取 JSON 文件
    df = pd.read_json(path)
    print(type(df))  # DataFrame
    
    # 2. 按行解析 JSON 数据
    x = df.to_dict(orient='records')
    print(type(x))  # list ,其中每个元素是一个字典
    
    # 3. 按列解析 JSON 数据
    y = df.to_dict(orient='list')
    print(type(y))  # dict 类型,其中每个键的值是列表
    
    # 4. 扁平化嵌套的 JSON 数据
    x_normalized = pd.json_normalize(x)
    print(x_normalized)
    
    # 5. 将 DataFrame 转换为 JSON 格式
    json_data = df.to_json()
    print(json_data)
    
    # 6. 将 DataFrame 写入 JSON 文件
    df.to_json('output.json')

     

    作者:五碗火锅

    物联沃分享整理
    物联沃-IOTWORD物联网 » python 解读JSON文件,一文搞懂!

    发表回复