在PowerShell中筛选Graph API返回的registeredDevices的id属性
解决Graph API返回registeredDevices冗余数据的方案
一、API请求层面直接过滤(最高效)
Graph API支持在$expand参数中嵌套$select,直接指定关联资源需要返回的字段,从源头减少冗余数据传输:
- 构造查询语句时,同时用
$select指定用户主对象需要的字段,再在$expand里给registeredDevices添加字段筛选:
这样返回的GET /users/<userId>?select=mail,jobTitle,id&$expand=registeredDevices($select=id)registeredDevices数组只会包含每个设备的id字段,其他冗余数据会被直接过滤掉。
二、客户端侧处理(针对特殊内容筛选)
如果你的需求是从registeredDevices的某个字段值中提取以"id="开头的子串,而非仅保留设备的id属性,就需要在拿到API返回结果后做客户端处理:
示例(JavaScript)
假设返回的设备对象中,某个字符串字段包含id=xxx格式的内容,遍历提取:
// 假设apiResponse是Graph API返回的完整结果 const targetValues = apiResponse.registeredDevices.flatMap(device => { // 遍历设备的所有属性值,筛选出以"id="开头的字符串 return Object.values(device).filter(val => typeof val === 'string' && val.startsWith('id=') ); });
如果明确知道目标字段(比如deviceId),可以更精准提取:
const filteredIds = apiResponse.registeredDevices .map(device => device.deviceId) .filter(id => id?.startsWith('id='));
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

