无法使用 jsonpath 节点 js 库获取特定元素值

Unable to fetch the specific element value using jsonpath node js library

我正在尝试根据元素在复杂 JSON 文件中的值获取元素的值。

如果 currency ='BRL'index 会发生变化,则尝试获取值属性(即 100),所以我只想尝试基于条件。

到目前为止,我刚刚尝试了以下内容:

脚本:

function test()
{
   var result = jsonpath.query(payload,"$..client_balance[?(@.type == 'AVAILABLE')]");
   console.log(result);
}

test();

输出:

[
  {
    amount: { currency: 'BRL', value: '100', skip: false },
    type: 'AVAILABLE'
  },
  {
    amount: { currency: 'USD', value: '10', skip: false },
    type: 'AVAILABLE'
  }
]

现在,如果 货币代码 = 'BRL',我只想获取值属性(即 100)。我尝试应用 [?(@.currency == 'BRL')] 在路径变量的尾部,但它返回空数组。

谁能帮我解决这个问题。

更新:

尝试了过滤函数来获取特定的元素值。

console.log(Object.values(payload).filter(element =>{
    element.currency === 'BRL';
   }));

输出:

[]
console.log(Object.values(payload).filter(element =>{
   return element.amount.currency === 'BRL';
}));

我认为这应该可行

这是一个有点复杂的查询,但它应该能为您提供所需的信息。

从您所拥有的开始,return您发布的结果集:

$..client_balance[?(@.type == 'AVAILABLE')]

向此添加另一个过滤器,该过滤器在 currency 字段的 amount 字段内部进行比较:

$..client_balance[?(@.type == 'AVAILABLE')][?(@.amount.currency === 'BRL')]

这应该只给出一个元素:

[
  {
    amount: { currency: 'BRL', value: '100', skip: false },
    type: 'AVAILABLE'
  }
]

从这里你想获得 value 字段,但要到达那里,你需要它的路径,这意味着你必须通过 amountcurrency 字段首先.

$..client_balance[?(@.type == 'AVAILABLE')][?(@.amount.currency === 'BRL')].amount.currency.value

这应该return

[
  100
]

请注意我们是working on a specification for JSON Path. If this library chooses to adhere to it once published, the === will need to change to a == as this is what we've decided to support