📜  在Python中序列化和反序列化复杂的 JSON(1)

📅  最后修改于: 2023-12-03 14:51:20.853000             🧑  作者: Mango

在Python中序列化和反序列化复杂的 JSON

JSON(Javascript Object Notation)是一种轻量级的数据格式,常用于数据交换,特别适合于Web环境下的数据传递。Python内置了一个JSON模块,可以用于序列化和反序列化JSON格式的数据。

什么是序列化和反序列化?

序列化是指将数据结构或对象转换为一组字节的过程,以便它们可以被存储在文件或内存中,或通过网络发送到远程系统。反序列化是将这些字节重新转换回数据结构或对象的过程。

在Python中,可以将Python数据类型(如字典,列表等)序列化为JSON格式,也可以将JSON格式的数据反序列化为Python数据类型。

如何序列化JSON数据?

Python内置的JSON模块提供了 json.dumps()json.dump() 两种用于序列化JSON数据的方法。

json.dumps() 方法将Python对象序列化为JSON字符串:

import json 
 
data = {"name": "Jack", "age": 26, "hobbies": ["reading", "running"]} 
json_str = json.dumps(data) 
print(json_str) 

输出:

{"name": "Jack", "age": 26, "hobbies": ["reading", "running"]}

json.dump() 方法将Python对象序列化为JSON对象,并将其写入文件中:

import json 
 
data = {"name": "Jack", "age": 26, "hobbies": ["reading", "running"]} 
with open("data.json", "w") as f: 
    json.dump(data, f) 
如何反序列化JSON数据?

Python内置的JSON模块提供了 json.loads()json.load() 两种用于反序列化JSON数据的方法。

json.loads() 方法将JSON字符串反序列化为Python对象:

import json 
 
json_str = '{"name": "Jack", "age": 26, "hobbies": ["reading", "running"]}' 
data = json.loads(json_str) 
print(data) 

输出:

{'name': 'Jack', 'age': 26, 'hobbies': ['reading', 'running']}

json.load() 方法从文件中读取JSON对象,并将其反序列化为Python对象:

import json 
 
with open("data.json", "r") as f: 
    data = json.load(f) 
print(data) 
序列化和反序列化复杂的JSON

对于包含嵌套的数据结构(如列表中嵌套字典,字典中嵌套列表等)的JSON数据,同样可以使用 json.dumps()json.loads() 方法进行序列化和反序列化。

import json 

data = {
    "username": "Alice",
    "age": 30,
    "hobbies": ["reading", "running"],
    "address": {
        "street": "123 Main St.",
        "city": "New York",
        "state": "NY"
    },
    "friends": [
        {
            "name": "Bob",
            "age": 28,
            "hobbies": ["swimming", "cycling"],
            "address": {
                "street": "456 Elm St.",
                "city": "Los Angeles",
                "state": "CA"
            }
        },
        {
            "name": "Charlie",
            "age": 25,
            "hobbies": ["hiking", "camping"],
            "address": {
                "street": "789 Oak St.",
                "city": "San Francisco",
                "state": "CA"
            }
        }
    ]
}

# 序列化为JSON字符串
json_str = json.dumps(data)
print(json_str)

# 反序列化JSON字符串为Python对象
data_again = json.loads(json_str)
print(data_again)

输出:

{"username": "Alice", "age": 30, "hobbies": ["reading", "running"], 
"address": {"street": "123 Main St.", "city": "New York", "state": "NY"}, 
"friends": [{"name": "Bob", "age": 28, "hobbies": ["swimming", "cycling"], 
"address": {"street": "456 Elm St.", "city": "Los Angeles", "state": "CA"}}, 
{"name": "Charlie", "age": 25, "hobbies": ["hiking", "camping"],
"address": {"street": "789 Oak St.", "city": "San Francisco", "state": "CA"}}]}
总结

Python的JSON模块提供了方便的方法序列化和反序列化JSON数据。对于复杂的JSON数据,可以使用 json.dumps()json.loads() 方法进行序列化和反序列化,从而简化代码的编写和维护。