问题描述
正则表达式的完美用法如下:
jmespath.search(currentStats,'Items [?Name == Annie
]')
但是我想将过滤后的键设为变量。
我尝试过
var name =“ Annie”
jmespath.search(JSONdata,'Items[?Name ==
%s ]' %name;
)
这不起作用。 预先非常感谢。
解决方法
jmespath或搜索功能没有内置的方法将值模板化到查询字符串中,但是您可以安全地将JSON文字与反引号一起嵌入,但是您的语言允许。
var name = "Annie";
var result = jmespath.search(JSONdata,'Items[?Name == `' + JSON.stringify(name).replace('`','\\`') + '`]');
我们需要将字符串转换为JSON escape any backticks in that string,然后将其包装在反引号中。让我们将其包装到一个函数中,使其更易于阅读:
function jmespath_escape(item) {
return '`' + JSON.stringify(name).replace('`','\\`') + '`';
}
var name = "Annie";
var result = jmespath.search(JSONdata,'Items[?Name == ' + jmespath_escape(name) + ']');