使用Jayway JSON路径的数组数组的JSON路径

问题描述 投票:1回答:2

我有一个像这样的JSON结构:

[{
  "firstName": "John",
  "age"      : 26,
  "phoneNumbers": [
    {
      "type"  : "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
},
{
  "firstName": "Johny",
  "lastName" : "doe",
  "age"      : 26,
  "address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  },
  "phoneNumbers": [
    {
      "type"  : "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
}] 

我想提取拥有Iphone且名称为JOHN的用户。

我用过以下表达式

$[?(@.firstName=='John')].phoneNumbers[?(@.type=='iPhone')] 

但我想提取完整的用户信息。我也尝试过Filter Criteria API,但在其中我无法找到访问Phone Type属性的方法。

arrays json jsonpath
2个回答
1
投票

正如本post中所提到的,Jayway实现支持内联AND和OR标准。以下JSON路径应满足您的要求。

$[?(@.firstName=='John' && 'iPhone' in @.phoneNumbers[*].type)]

以下是Jayway JsonPath Evaluator的截图

Jayway JsonPath Evaluator

此外,请注意,语法可能会有所不同,具体取决于使用的实现。


0
投票
for(var i=0;i<s.length;i++){
  for(var j=0;j<s[i].phoneNumbers.length;j++){
    if(s[i].phoneNumbers[j].type == 'iPhone'){
        alert(s[i].firstName+" "+s[i].age+" "+s[i].phoneNumbers[j].type+" 
              "+s[i].phoneNumbers[j].number);
    }
  }
}

这里var s是你的json对象。

© www.soinside.com 2019 - 2024. All rights reserved.