如何通过将本地变量放在查询字符串中来使用JSONPATH从JSON获取特定对象?

时间:2020-04-05 12:12:38

标签: javascript jsonpath

我正在探索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))

这给了我一个空数组。

1 个答案:

答案 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)