我正在寻找一个JSONPath表达式,它返回zoneType为“big”的所有区域对象。
输入JSON:
{
"board" : {
"zones" : {
"1": {
"zoneID": 1,
"zoneType":"big"
},
"2": {
"zoneID": 2,
"zoneType":"small"
},
"3": {
"zoneID": 3,
"zoneType":"small"
},
"4": {
"zoneID": 4,
"zoneType":"big"
},
}
}
}
预期产出: [{ “zoneID”:1, “zoneType”: “大” }, { “zoneID”:4, “zoneType”: “大” }]
我试过了: $ ..区域。[?(@。zoneType = '大')] $ ..区域。* [?(@。zoneType = '大')]
和其他许多人但没有运气。
答案 0 :(得分:0)
我最初也使用了jsonpath然后后来遇到了一些问题因此决定使用 循环遍历数据。你可以试试下面的代码。
var json = ur json data;
var output =(function(data){
var keys = (function (obj) {
var keys = [];
for (var key in obj) {
keys.push(key);
}
return keys;
})(data["board"]["zones"]);
var categoryFilter = new Function('data,keys',
"obj=[];" +
"for(var i=0;i<keys.length;i++){" +
"if (data[keys[i]].zoneType == 'big') {" +
"obj.push(data[keys[i]]);" +
"}" +
"}" +
"return obj;"
);
return JSON.stringify(categoryFilter(data["board"]["zones"], keys));
})(JSON);
答案 1 :(得分:0)
答案应该是:$ ..区域[?(@。zoneType ==“big”)]
以下作品: -
JsonPath.on(json_hash,'$ .. zones [?(@。zoneType ==“big”)]')
返回: -
[{“zoneID”=&gt; 1,“zoneType”=&gt;“big”},{“zoneID”=&gt; 4,“zoneType”=&gt;“big”}]
答案 2 :(得分:0)
JSONPath是非标准化的“查询语言”,但XPath是。使用DefiantJS,您可以使用XPath表达式查询JSON结构。该库使用方法“search”扩展全局对象JSON,并将匹配作为对象返回数组。
下面是示例代码(这里是小提琴http://jsfiddle.net/hbi99/DQ9CJ/):
var data = {
"board": {
"zones": {
"1": {
"zoneID": 1,
"zoneType": "big"
},
"2": {
"zoneID": 2,
"zoneType": "small"
},
"3": {
"zoneID": 3,
"zoneType": "small"
},
"4": {
"zoneID": 4,
"zoneType": "big"
}
}
}
},
found = JSON.search(data, '//*[zoneType="big"]'),
str = '';
for (var i=0; i<found.length; i++) {
str += found[i].zoneID +'<br/>';
}
document.getElementById('output').innerHTML = str;