如何使用带有逻辑或条件的 JSONPath 检索特定值?

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

我有一个可能会更改密钥的 JSON 结构:

{
  "status": "ONLINE",
  "meter": "A123",
  "date": "2024-02-28T14:51:12"
}

{
  "status": "ONLINE",
  "crew": "XMS-858",
  "date": "2024-02-28T15:05:19"
}

我需要帮助构建 JSONPath 表达式,以获取与 'meter' 键或 'crew' 键对应的值,具体取决于 json 中存在的值

我试过这个:

$.[?(@.meter || @.crew)]

它有效(OR表达式),但它让我完整地了解了找到密钥的位置

[
   {
      "status": "ONLINE",
      "crew": "XMS-858",
      "date": "2024-02-28T15:05:19"
   }
]

所以,我尝试了一种不同的方法。这个效果更好:

$.['meter', 'crew']

但是这样我就得到了键值对

{
   "crew": "XMS-858"
}

我只需要价值,我尝试了很多不同的方法但没有成功,

有人有主意吗?

jsonpath json-path-expression
1个回答
0
投票

jsonpath $.['meter', 'crew'] 

但是这样我就得到了键值对

json {    "crew": "XMS-858" } 

这不是我所期望的,也不是我的实现所做的(https://json-everything.net/json-path

迂腐地,

$.['meter', 'crew']
无效:您需要删除
.

$['meter', 'crew']

规范 RFC 9535 最近发布,大多数实现尚未采用它。因此,许多实现都支持自己的风格,因此您需要与他们核实具体细节。

在我的实现(合规)中,这会返回

[
  {
    "Value": "A123",
    "Location": "$['meter']"
  }
]

(我的实现给出了值及其在数据中出现的位置。)

© www.soinside.com 2019 - 2024. All rights reserved.