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

Python处理多对象JSON文件:流解析与event1-result配对需求

嘿,我明白你作为JSON新手的困惑——处理这种没有被数组包裹的多个独立JSON对象确实有点棘手,尤其是不能修改原文件的情况下。别担心,我们可以用流解析的方式逐个处理这些对象,完美提取你需要的event1和result配对。

解决方案:流解析多独立JSON对象

首先咱们得明确你的文件结构——通常这种多JSON对象的文件要么是每行一个独立JSON(最常见),要么是连续的无分隔JSON字符串(比如{"a":1}{"b":2}这种)。下面针对两种情况分别给出实现,同时覆盖常见的文件问题处理。

情况1:每行一个独立JSON对象

这是最普遍的场景,比如你的文件内容是:

{"event1": "AB", "result": 11, "other_key": "value1"}
{"event1": "AB", "result": 10, "other_key": "value2"}
{"event1": "BB", "result": 10, "other_key": "value3"}

我们可以逐行读取文件,每行单独解析为JSON对象,提取需要的字段:

import json

event_list = []
result_list = []

# 处理文件读取与解析
try:
    with open("your_file.json", "r", encoding="utf-8") as f:
        for line_num, line in enumerate(f, 1):
            # 跳过空行(如果有的话)
            line = line.strip()
            if not line:
                continue
            try:
                json_obj = json.loads(line)
                # 提取指定字段(你说结构精确,所以直接取键)
                event_list.append(json_obj["event1"])
                result_list.append(json_obj["result"])
            except json.JSONDecodeError as e:
                print(f"第{line_num}行JSON解析失败: {e}")
            except KeyError as e:
                print(f"第{line_num}行缺少指定字段: {e}")
except FileNotFoundError:
    print("错误:指定的文件不存在!")
except PermissionError:
    print("错误:没有读取该文件的权限!")
except Exception as e:
    print(f"发生未知错误: {e}")

# 输出配对结果
print("event1列表:", event_list)
print("result列表:", result_list)

情况2:连续无分隔的JSON对象

如果你的文件是没有换行的连续JSON(比如{"event1":"AB","result":11}{"event1":"AB","result":10}{"event1":"BB","result":10}),咱们可以用json.JSONDecoder的raw_decode方法来逐个解析:

import json

event_list = []
result_list = []

try:
    with open("your_file.json", "r", encoding="utf-8") as f:
        data = f.read()
        decoder = json.JSONDecoder()
        pos = 0
        while pos < len(data):
            try:
                json_obj, pos = decoder.raw_decode(data, pos)
                event_list.append(json_obj["event1"])
                result_list.append(json_obj["result"])
                # 跳过可能的空白字符(比如空格、换行)
                pos = data.find('{', pos)
                if pos == -1:
                    break
            except json.JSONDecodeError as e:
                print(f"在位置{pos}处解析失败: {e}")
                break
except FileNotFoundError:
    print("错误:指定的文件不存在!")
except PermissionError:
    print("错误:没有读取该文件的权限!")
except Exception as e:
    print(f"发生未知错误: {e}")

print("event1列表:", event_list)
print("result列表:", result_list)

关键说明

  • 不需要修改原文件:两种方法都是直接读取解析,完全不改动源文件内容,符合你的要求。
  • 流解析优势:不管文件多大,都不会一次性把整个文件加载到内存,适合处理大文件。
  • 异常处理:代码里覆盖了常见的文件问题(找不到文件、权限不足)和JSON解析问题(格式错误、字段缺失),你可以根据实际情况调整提示信息。

这样运行后,就能得到你想要的[AB, AB, BB]和[11,10,10]这样的配对列表啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:39:16