【问题标题】:JSONPath/JSONQuery filter on key键上的 JSONPath/JSONQuery 过滤器
【发布时间】:2014-07-01 03:45:53
【问题描述】:

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

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,是否还有其他易于使用和设置的库?我希望用户输入查询表达式,这就是为什么我更喜欢使用查询语言而不是仅仅评估纯 JavaScript(如 these guys)。

【问题讨论】:

  • 您的意图是验证特定模式的属性名称?或获取属性名称列表?
  • 我希望返回键以*_url 结尾的所有值。

标签: javascript dojo jsonpath


【解决方案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/

【讨论】:

    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多