如何通过将局部变量放入查询字符串中,使用 JSONPATH 从 JSON 获取特定对象?
How to fetch a specific object from JSON using JSONPATH by putting the local variable in query string?
我正在探索 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))
这给了我一个空数组。
由于字符串连接,您的查询将无法 运行 正确。通过在 Template String 中添加一个字符串变量,您可以有效地将它变成单个字符串并去掉双引号 " "
。因此,您需要专门插入双引号作为字符串值的一部分。
查看此示例以查看字符串的结果。
var dataToBeFound = "Bis"
var s = `$.data[?(@.Lastname == ${dataToBeFound})]`
console.log(s)
因此,您发现搜索表达式中缺少双引号,这会打断表达式。您可以通过字符串转义或使用模板文字 ` `
插入一个带有 " "
的值来解决此问题。
下面的示例向您展示了您的值是如何输出的,并且应该适用于您的 JSONPATH 查询。
var dataToBeFound = `"Bis"`;
var s = `$.data[?(@.Lastname == ${dataToBeFound})]`;
console.log(s)
我正在探索 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))
这给了我一个空数组。
由于字符串连接,您的查询将无法 运行 正确。通过在 Template String 中添加一个字符串变量,您可以有效地将它变成单个字符串并去掉双引号 " "
。因此,您需要专门插入双引号作为字符串值的一部分。
查看此示例以查看字符串的结果。
var dataToBeFound = "Bis"
var s = `$.data[?(@.Lastname == ${dataToBeFound})]`
console.log(s)
因此,您发现搜索表达式中缺少双引号,这会打断表达式。您可以通过字符串转义或使用模板文字 ` `
插入一个带有 " "
的值来解决此问题。
下面的示例向您展示了您的值是如何输出的,并且应该适用于您的 JSONPATH 查询。
var dataToBeFound = `"Bis"`;
var s = `$.data[?(@.Lastname == ${dataToBeFound})]`;
console.log(s)