在 Python 中,将 JSON 字符串转换为字典非常简单,使用内置的 json 模块即可。
基本方法
python
import json
# JSON 字符串
json_str = '{"name": "张三", "age": 25, "city": "北京"}'
# 转换为字典
data_dict = json.loads(json_str)
print(data_dict)
print(type(data_dict)) # <class 'dict'>
print(data_dict['name']) # 张三
完整示例
python
import json
# 示例 JSON 字符串
json_string = '''
{
"name": "李四",
"age": 30,
"hobbies": ["阅读", "游泳", "编程"],
"address": {
"street": "中山路123号",
"city": "上海"
},
"is_student": false
}
'''
# 转换为字典
data = json.loads(json_string)
# 访问数据
print(f"姓名: {data['name']}")
print(f"年龄: {data['age']}")
print(f"爱好: {data['hobbies']}")
print(f"城市: {data['address']['city']}")
print(f"是否学生: {data['is_student']}")
# 遍历字典
for key, value in data.items():
print(f"{key}: {value}")
处理异常
python
import json
json_str = '{"name": "王五", "age": 28' # 缺少闭合括号,无效JSON
try:
data = json.loads(json_str)
print("转换成功:", data)
except json.JSONDecodeError as e:
print(f"JSON解析错误: {e}")
print(f"错误位置: 行 {e.lineno}, 列 {e.colno}")
从文件读取 JSON
python
import json
# 从文件读取 JSON
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f) # 注意是 load() 不是 loads()
print(data)
注意事项
-
JSON 格式要求:
- 键名必须用双引号
"包裹(单引号会报错) - 字符串值必须用双引号
- 布尔值用
true/false(Python 中是True/False) - 空值用
null(Python 中是None)
- 键名必须用双引号
-
loads() vs load():
json.loads(): 从字符串解析json.load(): 从文件对象解析
-
中文处理:
python# 确保正确处理中文 json_str = '{"name": "张三"}' data = json.loads(json_str) print(data['name']) # 正常显示中文 # 输出时保持中文 print(json.dumps(data, ensure_ascii=False)) # {"name": "张三"}
反向操作:字典转 JSON 字符串
python
import json
data = {
"name": "赵六",
"age": 35,
"city": "广州"
}
# 转换为 JSON 字符串
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)
这样就可以轻松地在 JSON 字符串和 Python 字典之间进行转换了!