密钥上的JSONPath / JSONQuery过滤器

时间:2014-05-13 12:48:30

标签: javascript dojo jsonpath

我知道如何在JavaScript to filter on the values中使用JSONPath:

var o = {
  current_user_url: "https://api.github.com/user",
  other_user_url: "https://api.github.com/user",
  otherstuff: "stuff"
};
jsonPath(o, "$.[?(/https.*/.test(@))]") //returns ["https://api.github.com/user"]

但如何过滤按键?我希望在密钥以*_url结尾的位置返回所有值。以下内容不起作用,因为@显然只包含JSON对象的值。

jsonPath(o, "$.[?(/.*_url/.test(@))]")

如果JSONPath或JSONQuery无法实现,是否有另一个易于使用和设置的库?我希望用户输入query-expression,这就是为什么我更喜欢使用查询语言而不仅仅是评估纯JavaScript(如these guys)。

1 个答案:

答案 0 :(得分:1)

您可以使用DefiantJS(http://defiantjs.com),它使用“搜索”方法扩展全局对象JSON。使用此方法,您可以使用XPath语法搜索JSON结构,并将匹配作为类似数组的对象返回。

var data = {
  current_user_url: "https://api.github.com/user",
  other_user_url: "https://api.github.com/user",
  otherstuff: "stuff"
},
found = JSON.search(data, "//*[substring(name(), string-length(name())-3) = '_url']"),
str = '';

for (var i=0; i<found.length; i++) {
    str += found[i] +'<br/>';
}

document.getElementById('output').innerHTML = str;

要看到这一点,请查看这个小提琴; http://jsfiddle.net/hbi99/92vCL/