如何将含多个JSON的temp.txt文本文件加载到Python中?
问题分析与解决办法
报错原因
- 文件格式不合法:你的
temp.txt里是多个独立JSON对象直接并列,而标准JSON要求要么是单个对象,要么是用数组[]包裹所有对象、对象间用逗号分隔。这种非标准的并列格式直接解析必然出错。 - 代码用法错误:
json.load()是用来读取整个文件对象的方法,你循环读取单行后用json.load(line)完全误用——处理字符串应该用json.loads(),但更核心的问题是:单行内容根本不是完整的JSON对象,逐行解析逻辑本身就不成立。
解决办法
办法1:将文件改为标准JSON格式
把temp.txt修改为数组包裹的合法格式,示例如下:
[ { "names" : [{"index" : 0, "cards": "\n\nbingo" } ], "more stuff": "" }, { "names" : [{"index" : 0, "cards": "\nfalse" } ], "more stuff": "" } ]
然后用以下代码读取:
import json def read_op(filename): with open(filename, 'r') as file: data = json.load(file) return data # 调用示例 result = read_op("temp.txt") for item in result: print(item)
办法2:不修改原文件,直接解析多个独立JSON对象
如果无法修改原文件,可以读取整个文件内容,分割出单个JSON对象后逐个解析:
import json def read_op(filename): with open(filename, 'r') as file: content = file.read() # 按独立JSON对象的分隔符拆分内容 json_fragments = content.split('}\n{') # 补全每个片段的括号,使其成为完整JSON对象 json_fragments[0] = json_fragments[0] + '}' for i in range(1, len(json_fragments)-1): json_fragments[i] = '{' + json_fragments[i] + '}' json_fragments[-1] = '{' + json_fragments[-1] # 逐个解析并收集结果 parsed_data = [] for fragment in json_fragments: try: parsed_data.append(json.loads(fragment)) except json.JSONDecodeError as e: print(f"解析片段失败: {e}") return parsed_data # 调用示例 result = read_op("temp.txt") for item in result: print(item)
注:这种分割方式依赖于文件中每个JSON对象以}\n{分隔,如果文件存在其他换行或括号嵌套情况,可能需要调整为正则匹配完整JSON对象的逻辑。
内容的提问来源于stack exchange,提问作者Rahul Dev
相关产品推荐
相关产品推荐

