Python 将 JSON 字符串转换为字典

在 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)

注意事项

  1. JSON 格式要求

    • 键名必须用双引号 " 包裹(单引号会报错)
    • 字符串值必须用双引号
    • 布尔值用 true/false(Python 中是 True/False
    • 空值用 null(Python 中是 None
  2. loads() vs load()

    • json.loads(): 从字符串解析
    • json.load(): 从文件对象解析
  3. 中文处理

    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 字典之间进行转换了!

相关推荐
树獭非懒42 分钟前
AI大模型小白手册|Embedding 与向量数据库
后端·python·llm
小兵张健1 小时前
价值1000的 AI 工作流:Codex 通用前端协作模式
前端·aigc·ai编程
sunny_1 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
拉不动的猪1 小时前
移动端调试工具VConsole初始化时的加载阻塞问题
前端·javascript·微信小程序
ayqy贾杰3 小时前
Agent First Engineering
前端·vue.js·面试
IT_陈寒3 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
iceiceiceice4 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
大金乄4 小时前
封装一个vue2的elementUI 表格组件(包含表格编辑以及多级表头)
前端·javascript
唐叔在学习4 小时前
就算没有服务器,我照样能够同步数据
后端·python·程序员
葡萄城技术团队5 小时前
【性能优化篇】面对万行数据也不卡顿?揭秘协同服务器的“片段机制 (Fragments)”
前端