Python中如何将字符串转换为字典,常用于数据抓取场景
除了用 json.loads 之外 看到网上有人说 eval 但是用的时候总是报错各种 Traceback (most recent call last): File "run.py", line 44, in <module> run().get_spider(sys.argv[1:][0]) File "run.py", line 29, in get_spider news_source().get_odaily_content() File "/home/shenjianlin/my_project/news_source/news_source.py", line 544, in get_odaily_content print(eval(response.text)) File "<string>", line 1, in <module> NameError: name 'null' is not defined 用了就报错!</module></string></module>
Python中如何将字符串转换为字典,常用于数据抓取场景
建议代码格式整理一下。。不然。。。
在数据抓取时,经常需要把类似JSON的字符串转成字典。直接用json.loads()就行,但得注意字符串格式必须合法。如果字符串里是Python字面量(比如用单引号),可以用ast.literal_eval(),这比eval()安全。
import json
import ast
# 标准JSON字符串
json_str = '{"name": "Alice", "age": 25, "city": "Beijing"}'
data = json.loads(json_str)
print(data) # {'name': 'Alice', 'age': 25, 'city': 'Beijing'}
# 如果字符串是Python字面量格式(比如单引号)
py_str = "{'name': 'Bob', 'age': 30}"
data = ast.literal_eval(py_str)
print(data) # {'name': 'Bob', 'age': 30}
简单说,标准JSON用json.loads(),非标准Python字面量用ast.literal_eval()。
eval 可以将字符串改为字典?
可以用 from ast import literal_eval,不过有什么特别的原因不用 json.loads 吗?
另外你这个报错看着像是返回值并不是 json 格式,只是个 null。
我是看看有没有其他的处理方法
eval 还有安全性问题,是什么原因不能用 json.loads 吗?

