0

我正在寻找一个 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”:“big”},{“zoneID”:4,“zoneType”:“big”}]

我试过: $..zones.[?(@.zoneType='big')] $..zones.*[?(@.zoneType='big')]

和许多其他人,但没有运气。

4

3 回答 3

0

我最初也使用过 jsonpath,后来遇到了一些问题,所以决定使用循环数据。所以你可以试试下面的代码。

var json = 你的 json 数据;

var输出=(函数(数据){

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);

于 2013-03-15T12:57:52.033 回答
0

JSONPath 是非标准化的“查询语言”,但 XPath 是。使用 DefiantJS,您可以使用 XPath 表达式查询 JSON 结构。该库使用“搜索”方法扩展了全局对象 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;
于 2014-05-18T23:31:29.280 回答
0

答案应该是:$..zones[?(@.zoneType=="big")]

以下作品:-

JsonPath.on(json_hash, '$..zones[?(@.zoneType=="big")]')

返回:-

[{"zoneID"=>1, "zoneType"=>"big"}, {"zoneID"=>4, "zoneType"=>"big"}]

于 2014-01-05T08:45:16.780 回答