如何读取含两个连续无分隔符字典的JSON文件(Python)
解决无分隔符多JSON对象的解析问题
你遇到的问题是因为JSON解析器默认只能处理单个JSON值,但你的文件里是两个顶级字典直接拼接在一起,没有分隔符,所以解析到第一个字典结束后,剩余内容会触发报错。下面提供两种可行的解决方法:
方法一:使用json.JSONDecoder.raw_decode(推荐)
这个方法可以从字符串的指定位置开始解析单个JSON对象,同时返回解析结束的位置,非常适合处理这种拼接的多JSON场景,还能避免字符串中包含}{导致的错误分割问题。
代码示例:
import json result = [] with open('data.json', 'r', encoding='utf-8') as f: content = f.read() decoder = json.JSONDecoder() current_pos = 0 content_length = len(content) while current_pos < content_length: # 跳过可能的空白字符,定位下一个JSON对象的起始 current_pos = content.find('{', current_pos) if current_pos == -1: break obj, current_pos = decoder.raw_decode(content, current_pos) result.append(obj) # 现在result里就是两个独立的字典对象 print(len(result)) # 输出2
方法二:手动分割字符串(简单但有局限性)
如果能确保你的JSON内容里没有字符串值包含}{,可以直接把拼接的}{替换为}\n{,再逐段解析:
代码示例:
import json result = [] with open('data.json', 'r', encoding='utf-8') as f: content = f.read().replace('}{', '}\n{') for line in content.splitlines(): line = line.strip() if line: result.append(json.loads(line))
注意:如果JSON的字符串字段里出现}{(比如某个data数组里的字符串是"abc}{def"),这个方法会错误分割JSON,导致解析失败,所以优先用方法一。
内容的提问来源于stack exchange,提问作者not_coding
相关产品推荐
相关产品推荐

