我正在探索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))
这给了我一个空数组。
由于字符串连接,您的查询将无法正常运行。通过在“模板字符串”中添加字符串变量,您将有效地将其转换为单个字符串并丢失双引号" "
。因此,您需要专门将双引号插入字符串值的一部分。
请参见此示例以了解字符串的结果。
var dataToBeFound = "Bis"
var s = `$.data[?(@.Lastname == ${dataToBeFound})]`
console.log(s)
因此,您会发现搜索表达式中缺少双引号,这会打乱表达式。您可以通过转义字符串来解决此问题,也可以使用模板文字` `
在其周围插入带有" "
的值。
下面的示例向您显示如何输出您的值,并且该值应用于JSONPATH查询。
var dataToBeFound = `"Bis"`;
var s = `$.data[?(@.Lastname == ${dataToBeFound})]`;
console.log(s)