0

zoneType が「big」のすべてのゾーン オブジェクトを返す JSONPath 式を探しています。

入力 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 = 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);

于 2013-03-15T12:57:52.033 に答える
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 に答える
0

JSONPath は標準化されていない「クエリ言語」ですが、XPath は標準化されています。DefiantJS を使用すると、XPath 式を使用して JSON 構造を照会できます。このライブラリはグローバル オブジェクト JSON をメソッド "search" で拡張し、一致をオブジェクトのような配列として返します。

以下はコード例です (そして、ここにフィドル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 に答える