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

问题描述 投票:0回答:1

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

这给了我一个空数组。

javascript jsonpath
1个回答
0
投票

由于字符串连接,您的查询将无法正常运行。通过在“模板字符串”中添加字符串变量,您将有效地将其转换为单个字符串并丢失双引号" "。因此,您需要专门将双引号插入字符串值的一部分。

请参见此示例以了解字符串的结果。

var dataToBeFound = "Bis"
var s = `$.data[?(@.Lastname == ${dataToBeFound})]`

console.log(s)

因此,您会发现搜索表达式中缺少双引号,这会打乱表达式。您可以通过转义字符串来解决此问题,也可以使用模板文字` `在其周围插入带有" "的值。

下面的示例向您显示如何输出您的值,并且该值应用于JSONPATH查询。

var dataToBeFound = `"Bis"`;
var s = `$.data[?(@.Lastname == ${dataToBeFound})]`;

console.log(s)
© www.soinside.com 2019 - 2024. All rights reserved.