JSON是现代Web应用程序中使用的主要数据交换协议之一,因为它易于阅读和编写,并且与许多编程语言兼容,包括Python。本文将介绍如何在Python中使用JSON解析和转换字符串。
一、JSON简介
JSON(JavaScript Object Notation)是一种轻量级数据交换格式,它基于JavaScript语言的一个子集。JSON以键值对的形式表示数据,并使用大括号封装对象,用方括号封装数组。JSON的结构和Python中的字典和列表很像。 JSON数据类型: - 字符串:用双引号表示,例如:"hello world" - 数字:包括整数和浮点数,例如:12, 3.14 - 布尔值:true, false - 空值:null - 对象:用大括号{}表示,例如:{"name": "Mike", "age": 20} - 数组:用方括号[]表示,例如:[1, 2, 3]
二、JSON字符串转Python对象
Python中有一个内置的json模块,可以将JSON字符串转换为Python对象,例如字典或列表。使用json.loads()方法将JSON字符串解析为Python对象。
import json
json_string = '{"name": "Mike", "age": 20}'
python_obj = json.loads(json_string)
print(python_obj)
输出:
{'name': 'Mike', 'age': 20}
三、Python对象转JSON字符串
同样,可以使用json.dumps()方法将Python对象转换为JSON字符串。
import json
python_obj = {'name': 'Mike', 'age': 20}
json_string = json.dumps(python_obj)
print(json_string)
输出:
{"name": "Mike", "age": 20}
四、编码和解码自定义类
当涉及到自定义类时,json模块需要特殊处理。它无法自动序列化类,但是我们可以定义类的__dict__属性,将其转化为一个可序列化的字典。
import json
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return "Name: %s, Age: %d" % (self.name, self.age)
student = Student("Mike", 20)
def encode_student(student):
if isinstance(student, Student):
return {"name": student.name, "age": student.age}
return student.__dict__
json_str = json.dumps(student, default=encode_student)
print(json_str)
decoded_student = json.loads(json_str)
print(decoded_student)
输出:
{"name": "Mike", "age": 20}
{'name': 'Mike', 'age': 20}
在编码时使用default参数,指定一个函数来处理自定义类。在这里,我们将`Student`类转换为字典类型,其他类型则返回其`__dict__`属性。
五、处理JSON文件
可以使用`json.load()`和`json.dump()`来读写JSON文件。
import json
# 写入JSON文件
data = {"name": "Mike", "age": 20}
with open("data.json", "w") as f:
json.dump(data, f)
# 读取JSON文件
with open("data.json", "r") as f:
data = json.load(f)
print(data)
输出:
{'name': 'Mike', 'age': 20}
六、总结
本文介绍了Python中json字符串的解析和转换。我们学习了JSON的基本概念,如何将JSON字符串转换为Python对象、如何将Python对象转换为JSON字符串,如何处理自定义类,以及如何读写JSON文件。对于处理JSON数据,学习这些知识点是至关重要的。