Python中的JSON处理与序列化

星空下的诗人 2019-05-06 ⋅ 17 阅读

JSON(JavaScript Object Notation)是一种常用的数据交换格式,它使用人类可读的文本来表示数据对象。在Python中,我们可以使用内置的json模块来处理JSON数据。

JSON与Python数据类型的转换

Python的json模块提供了一系列函数来实现JSON数据与Python数据类型之间的转换。

将Python数据类型转换为JSON

import json

# 字典转换为JSON
data = {'name': 'John', 'age': 28}
json_data = json.dumps(data)
print(json_data)  # 输出:{"name": "John", "age": 28}

# 列表转换为JSON
data = [1, 'abc', {'foo': [1, 2, 3]}, True]
json_data = json.dumps(data)
print(json_data)  # 输出:[1, "abc", {"foo": [1, 2, 3]}, true]

在上面的例子中,我们使用json.dumps()函数将Python数据类型转换为JSON格式的字符串。

将JSON转换为Python数据类型

import json

# JSON转换为字典
json_data = '{"name": "John", "age": 28}'
data = json.loads(json_data)
print(data['name'])  # 输出:John

# JSON转换为列表
json_data = '[1, "abc", {"foo": [1, 2, 3]}, true]'
data = json.loads(json_data)
print(data[2]['foo'])  # 输出:[1, 2, 3]

在上面的例子中,我们使用json.loads()函数将JSON格式的字符串转换为Python数据类型。

读写JSON文件

Python的json模块还提供了读写JSON文件的功能。

读取JSON文件

import json

with open('data.json', 'r') as f:
    data = json.load(f)
    print(data)

上面的代码将会从data.json文件中读取JSON数据,并将其转换为Python数据类型。

写入JSON文件

import json

data = {'name': 'John', 'age': 28}

with open('data.json', 'w') as f:
    json.dump(data, f)

在上面的例子中,我们使用json.dump()函数将Python数据类型写入到data.json文件中。

自定义JSON序列化与反序列化方法

有时候,我们需要自定义对象的JSON序列化与反序列化方法。可以通过定义对象的__str__()和__dict__()方法来实现。

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

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

    def __dict__(self):
        return {'name': self.name, 'age': self.age}


person = Person('John', 28)

json_data = json.dumps(person, default=lambda x: x.__dict__)
print(json_data)  # 输出:{"name": "John", "age": 28}

data = json.loads(json_data, object_hook=lambda x: Person(x['name'], x['age']))
print(data)  # 输出:Person(name=John, age=28)

在上述例子中,我们通过定义__str__()方法返回自定义的字符串表示形式,并通过定义__dict__()方法返回自定义对象的属性字典。然后,在使用json.dumps()和json.loads()时指定相应的参数即可。

以上是Python中处理JSON数据的一些常用操作。通过使用json模块,我们可以简单地将Python数据类型转换为JSON格式的字符串,并且可以轻松地读写JSON文件。此外,我们还可以通过自定义序列化与反序列化方法来处理自定义对象的JSON转换。


全部评论: 0

    我有话说: