如何通过将局部变量放入查询字符串中,使用 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)