Python如何从REST接口JSON响应中提取m:instrumentId的#value值
报错根因
这个TypeError: list indices must be integers or slices, not str错误的本质是:你尝试用字符串Key直接索引列表类型的JSON节点,你预期为字典的某个JSON层级实际是数组,必须先指定数组下标才能继续提取下层字段。
正确提取方案
这类带m:前缀、#value字段的JSON通常是OData类接口的返回,通用结构如下:
{ "value": [ { "m:instrumentId": { "#value": "目标ID值" }, // 其他字段 }, // 更多数组元素 ] }
提取代码示例
如果你用requests库发起请求,参考如下代码:
import requests # 发起接口请求并转成Python字典 resp = requests.get("你的REST接口地址") json_data = resp.json() # 提取列表第一个元素的m:instrumentId#value值 target_id = json_data["value"][0]["m:instrumentId"]["#value"] print(target_id) # 如果要提取列表中所有元素的对应值,直接遍历即可 all_ids = [item["m:instrumentId"]["#value"] for item in json_data["value"]] print(all_ids)
层级调试技巧
如果你的JSON结构和上述示例不一致,可以逐层打印节点类型定位列表位置,再调整下标:
# 逐层打印节点类型,找到列表所在层级 print(type(json_data)) print(type(json_data["你要查的第一层key"])) # 遇到list类型时,先取下标再继续向下查
内容的提问来源于stack exchange,提问作者Bruno Lorena
相关产品推荐
相关产品推荐

