仅当条件为真时使用 JMESPATH 获取 JSON 元素的查询

A query to get a JSON element only when a condition is true with JMESPATH

当我有一个简单的 JSON 比如:

{
    "name": "Tom",
    "age": 20
}

是否有任何 JMESPath 查询仅在“name”为“Tom”时获取“age”?

查询应该得到“20”,上面 JSON。

但是,如果名字不是“Tom”,例如:

{
    "name": "Bob",
    "age": 31
}

查询应该return "null"。

为了过滤,您需要一个数组。
您可以使用函数 to_array.

从任何对象获取数组

然后,因为您有一个独特的对象,您可以停止过滤器创建的投影,并使用 | [0] 获取数组的第一个元素,如 pipe expressions section of the tutorial 中所述.

所以查询:

to_array(@)[?name == `Tom`].age | [0]
  • 这将为 JSON 提供 20
    {
      "name": "Tom",
      "age": 20
    }
    
  • 这将为 JSON 提供 null
    {
      "name": "Bob",
      "age": 31
    }