Python3 JSON 数据解析
                           
天天向上
发布: 2025-03-16 12:50:24

原创
843 人浏览过

在 Python3 中,处理 JSON 数据非常简单,标准库 json 提供了方便的 API 来解析 JSON 格式的数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于 Web 开发和数据传输。

1. json 模块简介

Python 的 json 模块用于编码(序列化)和解码(反序列化)JSON 数据。你可以将 Python 对象转换为 JSON 格式,也可以将 JSON 格式的数据转换为 Python 对象。

2. JSON 数据解析:从字符串到 Python 对象

2.1 解析 JSON 字符串

要将 JSON 字符串解析为 Python 对象,可以使用 json.loads() 函数。它将 JSON 字符串转换为 Python 字典或其他类型。

import json

# JSON 字符串
json_data = '{"name": "Alice", "age": 30, "city": "New York"}'

# 解析 JSON 字符串
data = json.loads(json_data)

# 输出结果
print(data)
print(type(data))

输出:

{'name': 'Alice', 'age': 30, 'city': 'New York'}
<class 'dict'>

json.loads() 返回的是一个 Python 字典,你可以像操作字典一样操作解析后的数据。

2.2 解析包含数组的 JSON 字符串

JSON 中也可以包含数组。下面的例子展示了如何解析包含数组的 JSON 字符串。

import json

# JSON 字符串,包含数组
json_data = '{"name": "Bob", "age": 25, "languages": ["English", "Spanish", "French"]}'

# 解析 JSON 字符串
data = json.loads(json_data)

# 输出数据
print(data)
print(data["languages"])  # 输出数组

输出:

{'name': 'Bob', 'age': 25, 'languages': ['English', 'Spanish', 'French']}
['English', 'Spanish', 'French']

3. JSON 数据解析:从文件到 Python 对象

如果 JSON 数据保存在文件中,可以使用 json.load() 函数将 JSON 文件内容加载到 Python 对象。

3.1 从文件中解析 JSON 数据

import json

# 假设 JSON 数据保存在 'data.json' 文件中
with open('data.json', 'r') as file:
    data = json.load(file)

# 输出解析后的数据
print(data)

4. JSON 数据编码:从 Python 对象到 JSON

4.1 编码 Python 对象为 JSON 字符串

你可以使用 json.dumps() 函数将 Python 对象(如字典、列表)编码为 JSON 字符串。

import json

# Python 字典
data = {"name": "Charlie", "age": 35, "city": "London"}

# 编码为 JSON 字符串
json_string = json.dumps(data)

# 输出 JSON 字符串
print(json_string)

输出:

{"name": "Charlie", "age": 35, "city": "London"}

4.2 设置 indent 美化 JSON 输出

可以使用 indent 参数来格式化输出,增加可读性。

import json

data = {"name": "Charlie", "age": 35, "city": "London"}

# 格式化输出 JSON 字符串
json_string = json.dumps(data, indent=4)

print(json_string)

输出:

{
    "name": "Charlie",
    "age": 35,
    "city": "London"
}

4.3 控制键的排序

json.dumps() 提供了 sort_keys 参数,用于控制输出的 JSON 键的排序。

import json

data = {"name": "Charlie", "age": 35, "city": "London"}

# 按照键排序输出
json_string = json.dumps(data, indent=4, sort_keys=True)

print(json_string)

输出:

{
    "age": 35,
    "city": "London",
    "name": "Charlie"
}

4.4 编码 Python 对象为 JSON 文件

你还可以将 Python 对象直接写入 JSON 文件。

import json

data = {"name": "Diana", "age": 40, "city": "Berlin"}

# 将 Python 对象写入 JSON 文件
with open('output.json', 'w') as file:
    json.dump(data, file, indent=4)

5. JSON 与自定义对象

当 JSON 数据中包含自定义对象时,Python 默认无法直接处理这些对象。你可以通过 default 参数来指定如何处理自定义对象。

5.1 自定义对象编码

import json

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def to_dict(self):
        return {"name": self.name, "age": self.age}

# 创建自定义对象
person = Person("Eva", 28)

# 编码时使用自定义的 `to_dict` 方法
json_string = json.dumps(person, default=lambda p: p.to_dict(), indent=4)

print(json_string)

输出:

{
    "name": "Eva",
    "age": 28
}

5.2 自定义对象解码

import json

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @staticmethod
    def from_dict(data):
        return Person(data["name"], data["age"])

# JSON 字符串
json_data = '{"name": "Eva", "age": 28}'

# 解码 JSON 字符串并创建自定义对象
person = json.loads(json_data, object_hook=Person.from_dict)

print(person.name, person.age)

输出:

Eva 28

6. 总结

  • json.loads(): 用于解析 JSON 字符串为 Python 对象(如字典、列表等)。
  • json.load(): 用于解析 JSON 文件内容为 Python 对象。
  • json.dumps(): 用于将 Python 对象编码为 JSON 字符串。
  • json.dump(): 用于将 Python 对象写入 JSON 文件。
  • 格式化输出:使用 indent 参数使输出的 JSON 数据更具可读性,使用 sort_keys 排序键。
  • 自定义对象:通过 default 参数处理自定义对象的编码,使用 object_hook 处理自定义对象的解码。

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *