📅  最后修改于: 2023-12-03 15:17:04.670000             🧑  作者: Mango
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,由于其易读易写的特点在网络数据传输中被广泛使用。在Python中,我们可以使用内置的json模块来解析和操作JSON数据。
将Python对象转换为JSON格式的过程称为序列化,而将JSON格式的字符串转换为Python对象的过程称为反序列化。在json模块中,分别使用dumps和loads方法进行序列化和反序列化:
import json
# 将Python对象转为JSON字符串
data = {"name": "张三", "age": 18}
json_str = json.dumps(data)
# 将JSON字符串转为Python对象
data = json.loads(json_str)
在处理JSON数据时,我们需要确保其满足特定的格式要求。对于一个未知或者不确定的JSON数据,我们希望能够确定其是否符合我们的预期格式。幸运的是,json模块内置了一个JSON验证器json.JSONDecoder,可以通过指定的编码风格校验JSON数据的格式是否合法,并且提供可读、有用的错误信息。
import json
decoder = json.JSONDecoder()
# 待校验的JSON数据
valid_json_data = '{"name": "张三", "age": 18}'
invalid_json_data = '{"name": "张三", "age": "18"}'
# 校验JSON格式是否合法
try:
data = decoder.decode(valid_json_data)
print("JSON格式校验通过:", data)
except json.JSONDecodeError as e:
print("JSON格式校验不通过:", str(e))
try:
data = decoder.decode(invalid_json_data)
print("JSON格式校验通过:", data)
except json.JSONDecodeError as e:
print("JSON格式校验不通过:", str(e))
输出结果:
JSON格式校验通过: {'name': '张三', 'age': 18}
JSON格式校验不通过: Expecting value: line 1 column 26 (char 25)
除了校验JSON数据的格式是否合法,我们还可以校验JSON数据的属性是否符合要求。我们可以使用schema模块通过定义校验规则实现此目的。
import json
from jsonschema import Draft7Validator
# 待校验的JSON数据
valid_json_data = '{"name": "张三", "age": 18}'
invalid_json_data = '{"name": "张三", "age": "18"}'
# JSON校验规则
schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"}
},
"required": ["name", "age"]
}
# 校验JSON数据属性是否合法
validator = Draft7Validator(schema)
try:
validator.validate(json.loads(valid_json_data))
print("JSON属性校验通过")
except Exception as e:
print("JSON属性校验不通过:", str(e))
try:
validator.validate(json.loads(invalid_json_data))
print("JSON属性校验通过")
except Exception as e:
print("JSON属性校验不通过:", str(e))
输出结果:
JSON属性校验通过
JSON属性校验不通过: '18' is not of type 'integer'
本文简单介绍了Python中处理JSON的一些基本操作,包括序列化、反序列化、JSON格式校验和JSON属性校验。当我们处理JSON数据时,可以根据实际需要选择适当的操作,提高开发效率和代码质量。