Python 将 JSON 格式字符串转换为 List
·
问题描述:
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
虽然它长得像列表,但实际上是一个 str 类型的变量,无法直接用索引访问或遍历:
type(raw_str) # <class 'str'>
raw_str[0] # '[' —— 取到的是字符 '[',而不是 'qwen-turbo'


那么如何将它转换为真正的 Python 列表呢?
解决方案:
方法一:使用 json.loads()(推荐)
import json
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
result = json.loads(raw_str)
print(result)
# ['qwen-turbo', 'qwen-plus', 'deepseek']
print(type(result))
# <class 'list'>

方法二:使用 ast.literal_eval()
import ast
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
result = ast.literal_eval(raw_str)
print(result)
# ['qwen-turbo', 'qwen-plus', 'deepseek']

原理解释:
为什么用 json.loads()?
我们的 raw_str 本质上是一个 JSON 格式的字符串(双引号 + 方括号 + 逗号),符合 JSON 规范。json.loads() 的作用就是将 JSON 字符串解析为对应的 Python 对象:
| SON 格式 | 转换后 Python 类型 |
|---|---|
[...] |
list |
{...} |
dict |
"text" |
str |
123 |
int |
true / false |
True / False |
两种方法的区别:
| 对比项 | json.loads() |
ast.literal_eval() |
|---|---|---|
| 来源模块 | json(标准库) |
ast(标准库) |
| 适用格式 | 仅限 JSON 格式(双引号) | 支持 Python 字面量(单/双引号均可) |
| 安全性 | 安全,只解析 JSON | 安全,只解析字面量,不执行代码 |
| 推荐场景 | 处理接口返回的 JSON 数据 | 处理 Python 风格的字符串 |
常见错误:直接使用 list():
很多人第一反应是用 list() 转换,但这会导致每个字符被拆成单独的元素:
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
list(raw_str)
# ['[', '"', 'q', 'w', 'e', 'n', '-', 't', 'u', 'r', 'b', 'o', '"', ',', ...]


list() 的作用是迭代字符串中的每一个字符,而不是解析字符串的结构。
总结:
- 遇到字符串形式的列表,不要用
list(),要用json.loads()或ast.literal_eval() - 如果字符串是标准 JSON 格式(双引号),优先用
json.loads() - 如果字符串用的是单引号(Python 风格),用
ast.literal_eval()
以下是完整代码:
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
print(type(raw_str))
print("-"*80)
import json
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
result = json.loads(raw_str)
print(result)
# ['qwen-turbo', 'qwen-plus', 'deepseek']
print(type(result))
# <class 'list'>
print("-"*80)
import ast
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
result = ast.literal_eval(raw_str)
print(result)
# ['qwen-turbo', 'qwen-plus', 'deepseek']
print("-"*80)
raw_str = '["qwen-turbo","qwen-plus","deepseek"]'
print(list(raw_str))
# print(raw_str)
# ['[', '"', 'q', 'w', 'e', 'n', '-', 't', 'u', 'r', 'b', 'o', '"', ',', ...]
更多推荐
所有评论(0)