我正在探索JSONPATH。我在JS中使用了它,以从父JSON中获取一些特定数据。
假设我拥有的JSON对象是
var JSON_OBJECT = {
"data" : [
{
"firstname" : "abn",
"Lastname" : "Bis"
},
{
"firstname" : "abh",
"Lastname" : "Bis"
},
{
"firstname" : "pqr",
"Lastname" : "mno"
}
]
}
我想获取姓氏为“ Bis”的对象。这就是我的代码来获取这些对象。
var fire = require('jsonpath')
var s = "$.data[?(@.Lastname == 'Bis')]"
console.log(fire.query(JSON_OBJECT, s))
所以我的问题是我是否将“ Bis”存储在变量中。然后如何编写相同的查询来获取那些对象?
这是我尝试过的。
var dataToBeFound = "Bis"
var s = `$.data[?(@.Lastname == ${dataToBeFound})]`
console.log(fire.query(JSON_OBJECT, s))
这给了我一个空数组。
答案 0 :(得分:0)
由于字符串连接,您的查询将无法正常运行。通过在“模板字符串”中添加字符串变量,您将有效地将其转换为单个字符串并丢失双引号" "
。因此,您需要专门将双引号作为字符串值的一部分插入。
请参见以下示例,以了解字符串的结果。
var dataToBeFound = "Bis"
var s = `$.data[?(@.Lastname == ${dataToBeFound})]`
console.log(s)
因此,您看到搜索表达式中缺少双引号,从而使表达式中断。您可以通过转义字符串或使用模板文字` `
来插入带有" "
的值来解决此问题。
下面的示例向您展示如何输出您的值,并且该值应用于JSONPATH查询。
var dataToBeFound = `"Bis"`;
var s = `$.data[?(@.Lastname == ${dataToBeFound})]`;
console.log(s)