如何通过WebAPI(PHP/cURL)使用OData过滤JSON嵌套数组字段?
解决OData嵌套数组字段过滤的问题
我来帮你搞定这个过滤嵌套数组的问题!首先看你的示例JSON,嵌套数组的字段名是companies(复数),但你第一个请求里写的是Company(单数),这是核心错误之一,导致服务器找不到对应的字段所以返回空响应。另外,OData的any()操作符确实需要用别名来引用数组元素,这部分你之前照搬文档的思路是对的,但字段名写错了。
正确的请求URL
https://www.ourserver.tld/Opportunities/?$filter=companies/any(d:d/name eq 'Company Name')
为什么这个是对的?
companies:严格对应你JSON里的嵌套数组字段名(复数,和你数据里的键完全一致)any(d:d/name eq 'Company Name'):d是数组中单个元素的别名(你可以换成其他任意合法变量名,比如c或者item都没问题)d/name表示引用数组里每个company对象的name属性- 整个
any()的作用是判断数组中是否存在至少一个元素满足name eq 'Company Name'的条件
你的两个错误解析
- 第一个URL用了
Company/any(...):字段名是单数,但你的数据里是复数companies,服务器识别不到这个字段,自然返回空结果 - 第二个URL去掉了别名部分
d:d/:OData语法要求any()必须指定一个变量来代表数组元素,直接写any(name eq ...)不符合语法规范,所以触发语法错误
额外验证提示
- 确认字段名的大小写是否完全匹配(OData通常对字段名大小写敏感)
- 确认目标名称的引号和拼写完全一致,避免空格或特殊字符的问题
内容的提问来源于stack exchange,提问作者thom_stackoverflow
相关产品推荐
相关产品推荐

