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

如何正确解析包含重复键的JSON文件并提取所有event字段数据

问题分析

你提供的原始JSON不符合标准规范,存在两个核心问题:

  • 单个JSON对象内不允许出现重复键名:外层result键重复,每个result对象内的event键也重复。按照标准JSON解析规则,重复键会被后续值直接覆盖,最终仅会保留最后一个result和每个result下最后一个event的内容,常规方法无法拿到全部数据。

首先你需要先修正JSON结构,将重复键改为数组形式,修正后的标准结构参考如下:

{
  "result": [
    {
      "event": [
        {"date": "12/12/13", "desc": "test1"},
        {"date": "12/12/14", "desc": "test2"},
        {"date": "12/12/15", "desc": "test3"}
      ]
    },
    {
      "event": [
        {"date": "12/12/13", "desc": "test5"},
        {"date": "12/12/14", "desc": "test6"},
        {"date": "12/12/15", "desc": "test7"}
      ]
    }
  ]
}
提取方案

假设你已经修正为上述标准JSON结构,不同场景下的提取方法如下:

方法1:使用jq命令(Linux/Mac终端场景)

如果JSON内容保存在data.json文件中,直接执行以下命令即可输出所有date和desc对应内容:

jq '.result[] | .event[] | {date, desc}' data.json

方法2:Python代码实现

import json

# 读取JSON文件
with open("data.json", "r", encoding="utf-8") as f:
    data = json.load(f)

# 提取所有date和desc
result_list = []
for res_item in data["result"]:
    for event_item in res_item["event"]:
        result_list.append({
            "date": event_item["date"],
            "desc": event_item["desc"]
        })

# 输出结果
for item in result_list:
    print(item)

方法3:JavaScript代码实现

// data为已解析完成的JSON对象
const resultList = []
data.result.forEach(resItem => {
  resItem.event.forEach(eventItem => {
    resultList.push({
      date: eventItem.date,
      desc: eventItem.desc
    })
  })
})
console.log(resultList)
无法修改原始JSON的特殊场景

如果上游系统问题无法修改JSON结构,可直接将原始内容作为字符串,通过正则匹配提取所有date和desc的值,Python示例代码如下:

import re

with open("raw.json", "r", encoding="utf-8") as f:
    raw_content = f.read()

dates = re.findall(r'"date":\s*"([^"]+)"', raw_content)
descs = re.findall(r'"desc":\s*"([^"]+)"', raw_content)
result = list(zip(dates, descs))
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:45:03