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

时间:2017-12-26 11:14:27

标签: arrays json jsonpath

我有一个像这样的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属性的方法。

2 个答案:

答案 0 :(得分:1)

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

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

以下是Jayway JsonPath Evaluator

的屏幕截图

Jayway JsonPath Evaluator

另外,请注意,语法可能会因使用的实现而有所不同。

答案 1 :(得分: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对象。