You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类字典字符串转字典出错,求问题原因与解决方法

问题分析与解决方案

首先,你的代码存在两个关键问题,咱们一步步拆解:

1. 用错了JSON解析函数

json.load()的设计目标是从文件对象里读取并解析JSON数据,它要求传入的参数是一个支持read()方法的文件对象(比如用open()打开的文件),而不是直接传字符串。你把字符串s塞进去,自然会报错AttributeError: 'str' object has no attribute 'read'——毕竟字符串根本没有read()方法嘛。

正确的字符串解析函数是json.loads()(注意末尾的s,代表string),这个才是专门用来解析JSON格式字符串的工具。

2. 字符串不符合JSON语法规范

JSON语法有严格要求:所有的键和字符串值必须用双引号包裹,但你的字符串用的是单引号',就算换成json.loads(),也会因为格式不合法解析失败。


两种可行的解决办法

方法一:修正字符串格式后用json.loads()

把字符串里的单引号改成双引号,再用json.loads()解析:

import json
s = '{"h":"hello"}'  # 或者写成带转义的形式:"{\"h\":\"hello\"}"
result = json.loads(s)
print(type(result))  # 输出:<class 'dict'>
print(result)        # 输出:{'h': 'hello'}

方法二:用ast.literal_eval()解析类Python字面量

如果不想修改原字符串的引号格式,可以用Python标准库ast里的literal_eval()方法。它能安全解析符合Python语法的字面量(包括单引号的字典、列表等),而且不像eval()那样有执行恶意代码的风险:

import ast
s = "{'h':'hello'}"
result = ast.literal_eval(s)
print(type(result))  # 输出:<class 'dict'>
print(result)        # 输出:{'h': 'hello'}

内容的提问来源于stack exchange,提问作者Houy Narun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:29:26