Python加载JSON后字典键为字符串非整型,如何转换为整型键?
问题原因
JSON 标准规定对象的键必须为字符串类型,因此 Python 内置的 json 模块解析 JSON 数据时,会默认将所有键转换为字符串,哪怕原始 JSON 中的键是数字样式,解析后也会变成字符串类型,这就是你用整数索引访问抛出 KeyError: 0 的原因。
解决方案
方案1:加载完成后手动转换键类型
适合只需要转换单层级字典、或者需要自定义转换规则的场景:
首先新增一个键转换函数:
def convert_str_keys_to_int(input_dict): processed_dict = {} for key, value in input_dict.items(): try: # 尝试将键转换为整数,转换成功则用整型作为新键 int_key = int(key) processed_dict[int_key] = value except (ValueError, TypeError): # 无法转换为整数的键保留原始类型 processed_dict[key] = value return processed_dict
在加载数据后调用该函数即可:
data = load_data("file.json")["teks"] # 转换字符串键为整型键 data = convert_str_keys_to_int(data) # 现在可以正常用整数索引访问 print(data[0])
方案2:加载时自动转换(更便捷)
通过 json.load 的 object_hook 参数,在解析 JSON 的过程中自动完成键转换,适配嵌套字典场景:
直接修改你的 load_data 函数即可:
def load_data(file): # 解析时的钩子函数,自动转换可转为整数的字符串键 def key_convert_hook(dct): return { int(k) if isinstance(k, str) and k.lstrip('-').isdigit() else k: v for k, v in dct.items() } with open(file, "r", encoding="utf-8") as f: data = json.load(f, object_hook=key_convert_hook) return data
修改后无需额外处理,加载后的数据直接支持整数索引访问:
data = load_data("file.json")["teks"] print(data[0])
注意事项
如果你的数据中存在本身就是字符串形式的数字键(比如键"01"本身不希望被转为整数1),可以调整转换函数的判断逻辑,过滤不符合格式要求的键即可。
内容的提问来源于stack exchange,提问作者ddinfiwis
相关产品推荐
相关产品推荐

