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

JSON Path for Array Of Array using Jayway JSON Path

我有一个 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')] 

但是我想提取完整的用户信息。我也尝试过过滤条件 API,但在其中我无法找到访问 Phone 类型属性的方法。

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 对象。

如本 中所述,Jayway 实现支持内联 AND 和 OR 条件。以下JSON路径应该符合您的要求。

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

下面是来自Jayway JsonPath Evaluator

的截图

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