Python中如何将多行二进制JSON数据转换为JSON对象
解决多行独立JSON对象的解析问题
问题原因
json.loads()仅能解析单个JSON实体(对象或数组),你的输入是多行独立的JSON对象,并非合法的单一JSON结构,因此触发JSONDecodeError: Extra data。- 原始数据中第二个JSON对象存在语法错误:
name"缺少前引号,应为"name",这也会导致解析失败。
解决方法
将每行独立的JSON对象逐个解析,收集为列表后可转为合法的JSON数组,步骤如下:
- 把字节数据解码为字符串,按行分割并过滤空行;
- 修复行内的JSON语法错误(如果存在);
- 逐行解析每个JSON对象,存入列表;
- 可选:将列表转为格式化的JSON数组字符串。
完整代码示例
import json # 原始字节数据 content = b'{"id": "1", "name": " value1"}\n{"id":"2", name": "value2"}\n{"id":"3", "name": "value3"}\n' # 解码为字符串并处理行 raw_str = content.decode('utf-8') json_lines = [line.strip() for line in raw_str.splitlines() if line.strip()] parsed_data = [] for line in json_lines: # 修复语法错误:补全name字段的前引号 corrected_line = line.replace('name":', '"name":') try: obj = json.loads(corrected_line) parsed_data.append(obj) except json.JSONDecodeError as err: print(f"解析失败: {line} | 错误: {err}") # 输出格式化后的JSON数组 print(json.dumps(parsed_data, indent=2))
运行结果
[ { "id": "1", "name": " value1" }, { "id": "2", "name": "value2" }, { "id": "3", "name": "value3" } ]
内容的提问来源于stack exchange,提问作者Lilly s
相关产品推荐
相关产品推荐

