Python 中常用的 JSON 操作方法

Python 中常用的 JSON 操作方法

在 Python 里,json 模块提供了丰富的功能来处理 JSON(JavaScript Object Notation)数据。除了常见的 json.loadsjson.dumps 方法外,还有其他一些实用的 JSON 操作方法,下面为你详细介绍。

1. json.loads

作用

json.loads 方法用于将 JSON 格式的字符串解析为 Python 对象(如字典、列表等)。它把符合 JSON 语法的字符串转换为 Python 能直接操作的数据结构。

示例代码

import json

# 定义一个 JSON 格式的字符串
json_str = '{"name": "Alice", "age": 25, "hobbies": ["reading", "swimming"]}'

# 使用 json.loads 将 JSON 字符串转换为 Python 字典
python_dict = json.loads(json_str)

# 打印转换后的 Python 字典
print(python_dict)
print(type(python_dict))  # 查看转换后对象的类型

# 访问字典中的元素
print(python_dict["name"])
print(python_dict["hobbies"])

代码解释

  • 首先定义了一个 JSON 格式的字符串 json_str
  • 调用 json.loads(json_str) 将该字符串转换为 Python 字典 python_dict
  • 打印转换后的字典及其类型,验证转换结果。
  • 最后通过字典的键访问其中的元素。

输出结果

{'name': 'Alice', 'age': 25, 'hobbies': ['reading', 'swimming']}
<class 'dict'>
Alice
['reading', 'swimming']

2. json.dumps

作用

json.dumps 方法用于将 Python 对象(如字典、列表等)转换为 JSON 格式的字符串。它把 Python 数据结构转换为符合 JSON 语法的字符串,方便在网络传输或存储中使用。

示例代码

import json

# 定义一个 Python 字典
python_dict = {
    "name": "Bob",
    "age": 30,
    "hobbies": ["running", "painting"]
}

# 使用 json.dumps 将 Python 字典转换为 JSON 字符串
json_str = json.dumps(python_dict)

# 打印转换后的 JSON 字符串
print(json_str)
print(type(json_str))  # 查看转换后对象的类型

代码解释

  • 先定义了一个 Python 字典 python_dict
  • 调用 json.dumps(python_dict) 将该字典转换为 JSON 格式的字符串 json_str
  • 打印转换后的字符串及其类型,验证转换结果。

输出结果

{"name": "Bob", "age": 30, "hobbies": ["running", "painting"]}
<class 'str'>

json.dumps 的可选参数

json.dumps 还有一些可选参数,例如 indent 用于设置缩进,使生成的 JSON 字符串更易读:

import json

python_dict = {
    "name": "Bob",
    "age": 30,
    "hobbies": ["running", "painting"]
}

# 使用 indent 参数设置缩进
json_str = json.dumps(python_dict, indent=4)
print(json_str)

输出结果

{
    "name": "Bob",
    "age": 30,
    "hobbies": [
        "running",
        "painting"
    ]
}

3. json.load

作用

json.load 用于从文件对象中读取 JSON 数据,并将其解析为 Python 对象。与 json.loads 不同,json.loads 处理的是字符串,而 json.load 处理的是文件对象。

示例代码

import json

# 打开一个包含 JSON 数据的文件
with open('data.json', 'r', encoding='utf-8') as file:
    # 从文件中读取并解析 JSON 数据
    data = json.load(file)
    print(data)
    print(type(data))

代码解释

  • 使用 open 函数以只读模式打开 data.json 文件。
  • 调用 json.load(file) 从文件对象 file 中读取 JSON 数据并解析为 Python 对象。
  • 打印解析后的数据及其类型。

4. json.dump

作用

json.dump 用于将 Python 对象转换为 JSON 格式的字符串,并将其写入文件对象中。和 json.dumps 不同,json.dumps 返回的是字符串,而 json.dump 是将结果写入文件。

示例代码

import json

# 定义一个 Python 字典
data = {
    "name": "Charlie",
    "age": 35,
    "hobbies": ["cycling", "photography"]
}

# 打开一个文件以写入 JSON 数据
with open('output.json', 'w', encoding='utf-8') as file:
    # 将 Python 对象转换为 JSON 格式并写入文件
    json.dump(data, file, indent=4, ensure_ascii=False)

代码解释

  • 定义一个 Python 字典 data
  • 使用 open 函数以写入模式打开 output.json 文件。
  • 调用 json.dump(data, file, indent=4, ensure_ascii=False) 将字典 data 转换为 JSON 格式并写入文件,indent=4 用于设置缩进,ensure_ascii=False 用于确保非 ASCII 字符能正确写入。

5. json.JSONEncoder

作用

json.JSONEncoder 是一个用于自定义 JSON 编码的类。当你需要将自定义的 Python 对象转换为 JSON 格式时,可以通过继承 json.JSONEncoder 类并重写 default 方法来实现。

示例代码

import json

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

class PersonEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Person):
            return {"name": obj.name, "age": obj.age}
        return super().default(obj)

# 创建一个自定义对象
person = Person("David", 40)

# 使用自定义编码器将对象转换为 JSON 字符串
json_str = json.dumps(person, cls=PersonEncoder)
print(json_str)

代码解释

  • 定义了一个 Person 类表示一个人。
  • 定义了一个 PersonEncoder 类,继承自 json.JSONEncoder,并重写了 default 方法,用于处理 Person 对象的编码。
  • 创建一个 Person 对象 person
  • 调用 json.dumps(person, cls=PersonEncoder) 使用自定义编码器将 person 对象转换为 JSON 字符串。

6. json.JSONDecoder

作用

json.JSONDecoder 是一个用于自定义 JSON 解码的类。当你需要将 JSON 数据解码为自定义的 Python 对象时,可以通过继承 json.JSONDecoder 类并重写 object_hook 方法来实现。

示例代码

import json

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

    def __repr__(self):
        return f"Person(name='{self.name}', age={self.age})"

def person_decoder(dct):
    if 'name' in dct and 'age' in dct:
        return Person(dct['name'], dct['age'])
    return dct

# 定义一个 JSON 字符串
json_str = '{"name": "Eve", "age": 45}'

# 使用自定义解码器将 JSON 字符串解码为自定义对象
person = json.loads(json_str, object_hook=person_decoder)
print(person)

代码解释

  • 定义了一个 Person 类表示一个人,并实现了 __repr__ 方法用于打印对象信息。
  • 定义了一个 person_decoder 函数,用于处理 JSON 对象的解码。
  • 定义一个 JSON 字符串 json_str
  • 调用 json.loads(json_str, object_hook=person_decoder) 使用自定义解码器将 JSON 字符串解码为 Person 对象。

这些方法可以满足不同场景下的 JSON 数据处理需求,帮助你更灵活地操作 JSON 数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值