Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 筛选器返回:属性不是单个值_Json_Odata - Fatal编程技术网

Json 筛选器返回:属性不是单个值

Json 筛选器返回:属性不是单个值,json,odata,Json,Odata,我想提出以下关于OData过滤器选项的问题 任何关于如何解决这个问题的想法都将受到高度赞赏 我的目标是解析JSON格式并只返回值 “工作站ID”:“8E5B3291-E092-4091-8C9A-58B7C90E907C” 我创建了以下请求,但它生成了以下错误消息 https://doesnotexist/MyApi/api/v1.0/locations?$expand=工作站、访问域、默认配置文件和$filter=工作站/工作站名称eq'LP08' “错误”:{ “代码”:“, “消息”:“U

我想提出以下关于OData过滤器选项的问题

任何关于如何解决这个问题的想法都将受到高度赞赏

我的目标是解析JSON格式并只返回值

“工作站ID”:“8E5B3291-E092-4091-8C9A-58B7C90E907C”

我创建了以下请求,但它生成了以下错误消息 https://doesnotexist/MyApi/api/v1.0/locations?$expand=工作站、访问域、默认配置文件和$filter=工作站/工作站名称eq'LP08'

“错误”:{ “代码”:“, “消息”:“URI中指定的查询无效。属性“WorkstationName”的属性访问的父值不是单个值。属性访问只能应用于单个值。”

错误是由我的筛选选项引起的:

过滤器=工作站/工作站名称eq“LP08”

我的JSON文件;

  "@odata.context": "https://doesnotexist/MyApi/api/v1.0/$metadata#locations",
  "value": [
    {
      "LocationIdInternal": 1,
      "LocationId": "B9507A00-9057-4CCC-A66B-9AAAB1B6CA5B",
      "DisplayName": "DEFAULT_LOCATION",
      "IsActive": true,
      "Workstations": [
        {
          "WorkstationIdInternal": 1,
          "WorkstationId": "E4FC58FB-7989-4C87-9216-0A3B9F52860E",
          "WorkstationName": "EX08",
          "WorkstationType": "Default"
        },
        {
          "WorkstationIdInternal": 2,
          "WorkstationId": "8E6DB912-F74F-444C-98D6-179747BBDE1A",
          "WorkstationName": "LP08",
          "WorkstationType": "Default"
        },
        {
          "WorkstationIdInternal": 3,
          "WorkstationId": "8E5B3291-E092-4091-8C9A-58B7C90E907C",
          "WorkstationName": "OVER77",
          "WorkstationType": "Default"
        }
      ]
    }
  ]
}

只需将过滤器放在$expand内:

https://doesnotexist/MyApi/api/v1.0/locations?$expand=Workstations($filter=WorkstationName eq'LP08')、AccessDomains、DefaultProfiles

这将仅扩展具有该名称的工作站

在@physius提供的解决方案上扩展,因为您正在查询
位置
控制器,并且每个位置可以有多个工作站,以仅将结果集筛选到具有名为
的工作站的位置
要返回与过滤器匹配的工作站,我们需要在两个位置应用过滤器:

  • 要仅返回具有与筛选器匹配的工作站的位置,我们需要使用
    Any
    操作符:

    https://doesnotexist/MyApi/api/v1.0/locations?$expand=Workstations,AccessDomains,DefaultProfiles&$filter=Workstations/Any(w:w/WorkstationName eq 'LP08')
    
  • 现在要限制扩展的
    工作站
    ,以便只返回匹配的工作站,我们还必须在扩展中定义$filter

    https://doesnotexist/MyApi/api/v1.0/locations?$expand=Workstations($filter=WorkstationName eq 'LP08'),AccessDomains,DefaultProfiles&$filter=Workstations/Any(w:w/WorkstationName eq 'LP08')
    
  • 使用这两个筛选器的原因是,根级别的
    $filter
    选项限制结果的数量,但它不影响这些结果的投影。这与SQL中的
    WHERE
    子句可以引用结果集中根本不包含的字段的方式非常相似

    只有
    $select
    $expand
    查询选项影响结果记录的投影,我们可以使用
    $select
    $filter
    $orderby
    甚至在
    $expand
    查询选项中嵌套
    $expand
    运算符


    我的目标是解析JSON格式并只返回值

    "WorkstationId": "8E5B3291-E092-4091-8C9A-58B7C90E907C",  
    
    如果您只想返回
    WorkstationId
    值,则删除其他
    $expand
    参数并将
    $select
    添加到扩展中可能更简单:

    但是,这仍然会在嵌套数组中返回结果,即使其中只有一个值

    {
    “@odata.context”:”https://doesnotexist/MyApi/api/v1.0/$metadata#位置“,
    “价值”:[
    {
    “位置内部”:1,
    “位置ID”:“B9507A00-9057-4CCC-A66B-9AAB1B6CA5B”,
    “显示名称”:“默认位置”,
    “IsActive”:是的,
    “工作站”:[
    {
    “工作站ID”:“8E6DB912-F74F-444C-98D6-179747BDE1A”
    }
    ]
    }
    ]
    }
    
    如果您只想返回
    工作站
    结果而不将其包装在某个位置,那么您应该能够查询
    工作站
    控制器,而不是
    位置
    一个:
    这只适用于您的模型支持此导航,但有助于记住“根”项类型必须始终是控制器或函数指定的类型

    {
    “@odata.context”:”https://doesnotexist/MyApi/api/v1.0/$metadata#工作站“,
    “价值”:[
    {
    “工作站ID”:“8E6DB912-F74F-444C-98D6-179747BDE1A”,
    “地点”:[
    {
    “位置内部”:1,
    “位置ID”:“B9507A00-9057-4CCC-A66B-9AAB1B6CA5B”,
    “显示名称”:“默认位置”,
    “IsActive”:正确
    }
    ]
    }
    ]
    }
    
    如果不需要位置信息,请完全省略EXPLAND子句

    https://doesnotexist/MyApi/api/v1.0/locations?$expand=Workstations($filter=WorkstationName eq 'LP08';$select=WorkstationName)&$filter=Workstations/Any(w:w/WorkstationName eq 'LP08')
    
    https://doesnotexist/MyApi/api/v1.0/workstations?$expand=Locations&$filter=WorkstationName eq 'LP08'&$select=WorkstationId