在使用 json.loads
解析 JSON 字符串时,默认情况下是处理 UTF-8 编码的字符串。因此,只要你的 JSON 字符串是 UTF-8 编码,json.loads
就可以正常解析。如果你需要确保字符串是 UTF-8 编码,可以在解析前进行检查和转换。
示例 1:直接使用 json.loads
解析 UTF-8 编码的字符串
import json
# UTF-8 编码的 JSON 字符串
json_str = '{"name": "张三", "age": 30, "city": "北京"}'
# 解析 JSON 字符串
data = json.loads(json_str)
print(data)
# 输出:{'name': '张三', 'age': 30, 'city': '北京'}
示例 2:确保字符串编码为 UTF-8 后解析
如果你的字符串可能不是 UTF-8 编码,可以使用 decode
方法确保字符串被正确处理为 UTF-8 编码,然后再使用 json.loads
进行解析:
import json
# 假设读取到的是 bytes 类型的数据
json_bytes = '{"name": "张三", "age": 30, "city": "北京"}'.encode('utf-8')
# 将 bytes 数据转换为 UTF-8 编码的字符串
json_str = json_bytes.decode('utf-8')
# 解析 JSON 字符串
data = json.loads(json_str)
print(data)
# 输出:{'name': '张三', 'age': 30, 'city': '北京'}
示例 3:从文件读取并确保 UTF-8 编码
如果 JSON 数据存储在文件中,你可以在读取时指定编码为 UTF-8,然后再进行解析:
import json
# 读取 JSON 文件,并确保使用 UTF-8 编码
with open('data.json', 'r', encoding='utf-8') as file:
json_str = file.read()
# 解析 JSON 字符串
data = json.loads(json_str)
print(data)
# 假设 data.json 的内容为:
# {"name": "张三", "age": 30, "city": "北京"}
# 输出:{'name': '张三', 'age': 30, 'city': '北京'}
示例 4:处理可能含有 BOM 的文件
有时,文件可能会包含字节顺序标记(BOM),这可能导致解析问题。在读取文件时,可以先去除 BOM:
import json
# 读取 JSON 文件,并确保使用 UTF-8 编码
with open('data_with_bom.json', 'r', encoding='utf-8-sig') as file:
json_str = file.read()
# 解析 JSON 字符串
data = json.loads(json_str)
print(data)
总结
- 直接解析 UTF-8 编码的 JSON 字符串:
json.loads
本身支持 UTF-8 编码,直接解析即可。 - 确保字符串编码为 UTF-8: 如果原始数据不是 UTF-8 编码,先转为 UTF-8 再解析。
- 读取文件时指定 UTF-8 编码: 读取 JSON 文件时,指定
encoding='utf-8'
以确保正确处理非 ASCII 字符。 - 处理包含 BOM 的文件: 使用
'utf-8-sig'
编码读取以去除 BOM。
通过这些方法,你可以确保在使用 json.loads
时正确处理 UTF-8 编码的 JSON 数据。