如何在JSON文件中根据Key查找对应对象的位置?
如何在JSON文件中根据Key查找对应对象的位置?
我想在JSON文件中根据Key查找对应对象的位置,但尝试使用collection模块后发现,即便数据是字典格式,该模块也无法处理JSON文件中的数据。
reda.json 文件内容:
[{"carl": "33"}, {"break": "55"}, {"user": "heake"}]
尝试的第一段代码:
import json import collections json_data = json.load(open('reda.json')) if type(json_data) is dict: json_data = [json_data] d = collections.OrderedDict((json_data)) h = tuple(d.keys()).index('break') print(h)
尝试的第二段代码及结果:
j = 'break' for i in json_data: if j in i: print(j.index('break'))
运行结果:0
正确解法:
你的JSON文件解析后得到的是多个字典组成的列表,不需要用到collections模块,直接遍历列表并跟踪索引即可找到目标Key所在对象的位置。
示例代码:
import json # 安全加载JSON数据 with open('reda.json', 'r') as f: json_data = json.load(f) target_key = 'break' # 用enumerate同时获取索引和元素 for idx, item in enumerate(json_data): if target_key in item: print(f"Key '{target_key}' 所在对象的位置索引是: {idx}") break else: print(f"未找到Key '{target_key}'")
代码说明:
with open会自动关闭文件,避免资源泄漏enumerate(json_data)可以同时拿到每个字典在列表中的索引idx和字典本身item- 找到目标Key后立即输出索引并终止循环;遍历完未找到则输出提示
之前代码出错的原因:
- 第一段代码:试图把整个字典列表转成
OrderedDict,但OrderedDict需要键值对序列作为参数,直接传入列表会报错 - 第二段代码:
j.index('break')是取字符串'break'内部字符的索引('b'在字符串里的位置是0),不是该字典在列表中的位置,所以结果不符合预期
内容的提问来源于stack exchange,提问作者Alesia Thiel
相关产品推荐
相关产品推荐

