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

如何将JSON文件中存储的字符串转回Python列表?

解决JSON重复序列化导致读取结果为字符串的问题

问题原因

你碰到的问题是因为重复序列化了数据:先用json.dumps()把书籍列表转成JSON字符串,接着又用json.dump()把这个字符串再次序列化写入文件。这会让文件里存的是一个被JSON转义过的字符串(比如原本的[{"name": "xxx"}]会变成"[{\"name\": \"xxx\"}]"),所以读取后得到的是转义后的字符串,而非预期的列表。


方法一:修复已写入的文件(把读取到的字符串转回列表)

既然文件里存的是两次序列化后的字符串,只需要对读取结果再做一次json.loads()解析就行:

import json

# 读取并转回列表
with open('json_books.json', 'r', encoding='utf-8') as f:
    # 先读到转义后的字符串
    str_data = json.load(f)
    # 再解析一次得到原始列表
    book_list = json.loads(str_data)

print(type(book_list))  # 输出 <class 'list'>

如果直接用文件读取方法,也可以这么处理:

with open('json_books.json', 'r', encoding='utf-8') as f:
    str_data = f.read().strip()
    book_list = json.loads(str_data)

方法二:修正写入逻辑(避免再犯同样的错)

正确的做法是直接用json.dump()把原始列表写入文件,不需要提前用json.dumps()转字符串:

import json

# 原始书籍列表
book_list = [{"title": "Python入门", "author": "张三"}, {"title": "数据分析实战", "author": "李四"}]

# 直接写入列表,无需提前转字符串
with open('json_books.json', 'w', encoding='utf-8') as f:
    json.dump(book_list, f, ensure_ascii=False, indent=4)

# 此时读取直接得到列表
with open('json_books.json', 'r', encoding='utf-8') as f:
    loaded_list = json.load(f)

print(type(loaded_list))  # 输出 <class 'list'>

简单说:json.dump()负责把Python对象(列表、字典这类)直接转成JSON格式写入文件,而json.dumps()是把对象转成JSON字符串,两者不需要同时用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:09:50