如何在JMESPath表达式中使用变量?

问题描述

正则表达式的完美用法如下: 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) + ']');