【问题标题】:How to properly parse JSON file with duplicate keys?如何正确解析带有重复键的 JSON 文件?
【发布时间】:2021-12-19 01:33:20
【问题描述】:

我有一个 JSON 字符串,例如:

{
   "result":
            {
              "event": {"date": "12/12/13", "desc": "test1"},
              "event": {"date": "12/12/14", "desc": "test2"},
              "event": {"date": "12/12/15", "desc": "test3"}
            },
  "result":
            {
              "event": {"date": "12/12/13", "desc": "test5"},
              "event": {"date": "12/12/14", "desc": "test6"},
              "event": {"date": "12/12/15", "desc": "test7"}
            }
}

我想在所有结果中获取每个事件的所有日期和描述,怎么做?

【问题讨论】:

  • 我有一个 JSON 字符串 - 不,你没有 JSON,因为它不是有效的。
  • @buran 似乎有点灰色地带 -- stackoverflow.com/questions/21832701/… -- 但你是对的,因为规范 recommends,大多数解析器都不允许这样做防止重复键。
  • 在这种情况下我要做的是使用文本编辑器(或简单脚本)将第一个和最后一个 { } 更改为 [ ] 并删除显示 "result": 的行。现在您有了一个可以导入和处理的有效 JSON 列表。
  • @BrendanAbel 是的,我同意这有点灰色地带。但正如在同一链接中提到的,如果对象中有重复的名称字符串,则应覆盖同一键的词法前面的值。即最后一次获胜。用json模块解析不会出错,但也不会得到所有的值。

标签: python json parsing


【解决方案1】:

你可以使用ijson包:

import ijson
with open('data.json') as f:
    events = list(ijson.items(f, 'result.event'))
print(events)

输出:

[{'date': '12/12/13', 'desc': 'test1'}, {'date': '12/12/14', 'desc': 'test2'}, {'date': '12/12/15', 'desc': 'test3'}, {'date': '12/12/13', 'desc': 'test5'}, {'date': '12/12/14', 'desc': 'test6'}, {'date': '12/12/15', 'desc': 'test7'}]

不过,我认为在 JSON 文件中应该避免这种重复的键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-17
    • 2021-12-13
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2018-10-09
    相关资源
    最近更新 更多