我有一个像这样的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属性的方法。
答案 0 :(得分:1)
如本post所述,Jayway实现支持内联AND和OR标准。以下JSON路径应满足您的要求。
$[?(@.firstName=='John' && 'iPhone' in @.phoneNumbers[*].type)]
的屏幕截图
另外,请注意,语法可能会因使用的实现而有所不同。
答案 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对象。