Python新手调用地理信息API提取几何类型并创建JSON字典时遭遇KeyError:'type'的求助
解决从JSON提取几何类型时的KeyError问题
我明白你作为Python初学者遇到的困扰了——你想基于已有的JSON文件构建一个包含API元素几何类型的字典,但代码抛出了KeyError: 'type',这是因为你找错了type键的层级位置。
先看你写的代码:
with open(filename) as json_file: data_raw = json.load(json_file) data_events = dict(type=data_raw['type'], features=[])
错误信息:
Traceback (most recent call last): File "<string>", line 25, in <module> KeyError: 'type'
从你给出的API返回数据片段来看:
... "geometry":{ "type":"Point", "coordinates":[ 2.900875, 48.550178 ] },...
type并不是JSON顶层的键,而是嵌套在geometry对象里的。而且通常这类API返回的是GeoJSON格式,顶层结构一般是{"type": "FeatureCollection", "features": [...]},每个feature里才包含geometry字段。
修正方案
首先建议你先打印出整个data_raw的结构,确认键的层级:
with open(filename) as json_file: data_raw = json.load(json_file) print(data_raw) # 查看JSON的完整结构
然后根据结构调整代码,用.get()方法可以避免KeyError(当键不存在时返回默认值):
with open(filename) as json_file: data_raw = json.load(json_file) # 初始化结果字典,顶层type用get获取,默认值设为Unknown防止出错 data_events = { 'type': data_raw.get('type', 'Unknown'), 'features': [] } # 遍历每个feature,提取几何类型 for feature in data_raw.get('features', []): # 逐层获取geometry下的type,每层都用get容错 geometry_type = feature.get('geometry', {}).get('type', 'Unknown') # 将几何类型加入features列表,你可以根据需求调整存储格式 data_events['features'].append({'geometry_type': geometry_type})
为什么这样改?
- 使用
.get(key, 默认值)代替直接[]取值,就算某个键不存在,代码也不会崩溃,而是返回你指定的默认值。 - 明确了层级:几何类型是在
feature -> geometry -> type路径下,而不是JSON的顶层。 - 遍历
features数组,逐个提取每个元素的几何类型,符合你要收集API元素几何类型的需求。
内容的提问来源于stack exchange,提问作者Sami Hafiane
相关产品推荐
相关产品推荐

