SharePoint REST API添加筛选后返回空对象数组的问题求助
你遇到的问题核心是筛选层级与展开属性的匹配问题,加上odata=nometadata模式下的属性返回规则导致空对象。下面分两种场景给出解决方案:
场景1:你要筛选的是「文件的ID」
原来的筛选条件ID eq 1 or ID eq 2其实是筛选文件夹(列表项)的ID,而非文件的ID。如果目标是获取指定ID的文件,需要用any操作符针对文件集合筛选,修改后的请求URL如下:
https://<myDomain>.sharepoint.com/sites/<mySite>/_api/web/lists/getbytitle('<myList>')/items?$select=Folder/Files/ListItemAllFields/ID,Folder/Files/ListItemAllFields/Title&$expand=Folder/Files/ListItemAllFields&$filter=Folder/Files/any(f: f/ListItemAllFields/ID eq 1 or f/ListItemAllFields/ID eq 2)
any(f: ...)用于遍历文件夹下的文件集合,匹配符合ID条件的文件。
场景2:你要筛选的是「文件夹的ID」,再获取该文件夹下的所有文件
原来的请求返回空对象,是因为$select只指定了嵌套的文件属性,没有包含父级的Folder属性——在odata=nometadata模式下,未被选中的父属性不会被返回,导致嵌套的子属性也无法显示。调整$select,加入Folder父属性即可:
https://<myDomain>.sharepoint.com/sites/<mySite>/_api/web/lists/getbytitle('<myList>')/items?$select=Folder,Folder/Files/ListItemAllFields/ID,Folder/Files/ListItemAllFields/Title&$expand=Folder/Files/ListItemAllFields&$filter=ID eq 1 or ID eq 2
此时返回的每个结果对象中,会包含Folder字段,其下的Files数组就是对应文件夹下的所有文件,每个文件会携带ListItemAllFields的ID和Title。
关键说明
- SharePoint REST API对集合类型的嵌套属性(比如
Folder/Files)筛选时,必须使用any或all操作符,不能直接用eq匹配集合中的元素。 odata=nometadata模式会严格按照$select指定的字段返回,未被选中的父级字段不会显示,其嵌套的子字段也会被隐藏,因此需要确保$select包含所有需要的层级属性。
内容的提问来源于stack exchange,提问作者CyberLord
相关产品推荐
相关产品推荐

