【问题标题】:Is there a way to convert a JMESPATH boolean to the opposite value?有没有办法将 JMESPATH 布尔值转换为相反的值?
【发布时间】:2021-05-05 12:53:40
【问题描述】:

我有一个值为 true 的 JSON,我想返回 false。

下面是一个例子:

{"a": {"City": "Hello", "flag": false}}

我调用a.flag 以获取false 值。但是我还没有找到将false 转换为true 的方法。

我在https://jmespath.org/tutorial.html 中尝试过a.flag == false,但它不能正常工作。

【问题讨论】:

  • 发布得太早了!我找到了解决方案。如果你用括号包裹 JMESPATH 路径,那么在前面放一个!,in 返回相反的值。例如)! (a.flag)

标签: boolean jmespath


【解决方案1】:

您的尝试无效,因为您的 false 值在条件 a.flag == false 中未正确解释。

您在执行a.flag == false 时真正要做的是,您将JSON 对象的键false 的值与a.flag 的值进行比较。

确认这一点的一种方法是运行查询:

foo.flag == false

在这两个 JSON 上

  • {
      "false": "some value",
      "foo": {
        "city": "Brussels",
        "flag": "some value"
      }
    }
    
    这将返回true
  • {
      "false": "some other value",
      "foo": {
        "city": "Brussels",
        "flag": "some value"
      }
    }
    
    这将返回false

在 JMESPath 中将值与布尔值进行比较的正确方法是使用 literal expression,因此,将布尔值放在反引号 `true` 中。

使用查询:

foo.flag == `false`

通过 JSON

{
  "foo": {
    "city": "Brussels",
    "flag": false
  }
}

我们得到了预期:true


当然,正如您评论的那样,您可以简单地使用not-expression

!(foo.flag)

【讨论】:

    猜你喜欢
    • 2023-01-27
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2014-03-20
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多