Python遍历无列表结构的JSON字典报错及实现需求
问题解决:遍历JSON字典中的子字典块
你遇到的错误原因很直接:直接遍历Python字典时,默认只会拿到字典的键(也就是"univ1"、"univ2"这类字符串),而不是键对应的字典值。所以item是字符串类型,自然没有rsample属性。
要遍历每个univ对应的字典块,有两种常用方式:
方式1:只遍历子字典值
如果不需要用到univ1、univ2这些键名,直接用values()方法获取所有子字典:
import json f = ''' { "configurator": { "term": "enabled" }, "monitor": { "nortel": "thread" }, "micros": { "code": "1200" }, "universities": { "univ1": { "code": "TTSG", "rsample": { "meta_data": "TGED", "samcode": "" }, "tables": { "count": "1" }, "storage": { "wooden": [], "metal": [], "plastic": [] } }, "univ2": { "code": "TTSS", "rsample": { "meta_data": "TGES", "samcode": "" }, "tables": { "count": "2" }, "storage": { "wooden": [], "metal": [], "plastic": [] } } } } ''' data = json.loads(f) data_topology = data['universities'] # 遍历所有子字典值 for item in data_topology.values(): print(item["rsample"]) # 字典用键索引访问,而非点语法
方式2:同时获取键名和子字典
如果需要用到univ1这类标识名称,用items()方法同时拿到键和值:
for univ_key, univ_data in data_topology.items(): print(f"当前处理:{univ_key}") print(univ_data["rsample"]["meta_data"]) # 可以继续嵌套访问内部字段 # 在这里添加对任意数量univ的操作逻辑
注意:JSON解析得到的是普通Python字典,访问内部字段必须用键索引语法[],不能用点.(点语法是类实例的属性访问方式,不适用于普通字典)。
内容的提问来源于stack exchange,提问作者youhoome
相关产品推荐
相关产品推荐

