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

JSON文件含重复键,Python加载后仅显单个值,如何解决?

问题:JSON重复键加载后丢失的原因与解决办法

你有如下格式的JSON文件:

[{"groupid": -1001742069667, 
  "5214840393": "0x8B9e9893663f1845304073f0250b8d706145ceF1", 
  "5214840393": "0x8B9e9893663f1845304073f0250b8d706145ceF1", 
  "5214840393": "0x8B9e9893663f1845304073f0250b8d706145ceF1"
  }, 
  {"groupid": -1001742069669}, 
  {"groupid": -1001742069669}, 
  {"groupid": -1001742069669}, 
  {"groupid": -1001742069669}]

使用以下Python代码加载并打印第一个字典对象:

import json
file=open("addresses.json",'r')
new = json.load(file)
print(new[0])

执行结果仅显示:

{'groupid': -1001742069667, '5214840393': '0x8B9e9893663f1845304073f0250b8d706145ceF1'}

但期望打印出该字典中的所有条目,以下是原因分析与解决办法:

原因

  • JSON规范明确要求对象的键必须唯一,Python标准库的json模块在解析时,会用后续出现的同名键值对覆盖前面的,最终仅保留最后一个同名键对应的内容。
  • 你提供的JSON中第一个对象包含3个相同的"5214840393"键,解析后自然只剩下最后一个的取值。

解决办法

方法1:修改JSON结构(推荐)

将相同键对应的多个值改为数组形式,既符合JSON规范,也能正常解析所有内容:

[
  {
    "groupid": -1001742069667, 
    "5214840393": [
      "0x8B9e9893663f1845304073f0250b8d706145ceF1", 
      "0x8B9e9893663f1845304073f0250b8d706145ceF1", 
      "0x8B9e9893663f1845304073f0250b8d706145ceF1"
    ]
  },
  {"groupid": -1001742069669},
  {"groupid": -1001742069669},
  {"groupid": -1001742069669},
  {"groupid": -1001742069669}
]

使用原代码加载后,就能看到数组形式的所有值。

方法2:自定义JSON解析器

如果无法修改JSON源文件,可通过json.JSONDecoder的object_pairs_hook参数自定义解析逻辑,将重复键的值收集到数组中:

import json

def handle_duplicate_keys(pairs):
    result = {}
    for key, value in pairs:
        if key in result:
            # 若键已存在,转换为数组存储
            if not isinstance(result[key], list):
                result[key] = [result[key]]
            result[key].append(value)
        else:
            result[key] = value
    return result

with open("addresses.json", 'r') as file:
    new = json.load(file, object_pairs_hook=handle_duplicate_keys)
    print(new[0])

执行后输出:

{'groupid': -1001742069667, '5214840393': ['0x8B9e9893663f1845304073f0250b8d706145ceF1', '0x8B9e9893663f1845304073f0250b8d706145ceF1', '0x8B9e9893663f1845304073f0250b8d706145ceF1']}

内容的提问来源于stack exchange,提问作者malaka namaka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:50:35