【问题标题】:Not able to parse & return boolean value using jsonpath无法使用 jsonpath 解析和返回布尔值
【发布时间】:2020-09-07 23:27:48
【问题描述】:

我有一个简单的 JSON(如下)。修改后的数组元素中的内容可能会有所不同。每当修改后的元素至少有一个以“test/”开头的文件名和一个不同的输出(如果没有一个文件以“test/”开头)时,我需要有一个固定的输出。我需要使用 JsonPath 来做到这一点。

到目前为止我使用的所有表达式(例如 $.commits[].[?(@ =~ /test.*?/i)] ) 如果表达式匹配,则给我文件列表,我需要有一个固定值 (truefalse) 不是修改的[] 元素值,如果修改元素中的任何数组元素以 'test' em>。

任何帮助将不胜感激。

{"commits":[{"modified":["test/db/ecs-db.sql","test/infra/infra-settings.json","test1/code/code.java"]}]}

【问题讨论】:

  • 你能不能简单地检查一下你得到的文件列表是否为空(长度为零)?

标签: java jsonpath


【解决方案1】:

JSONPath的定义是:

JSONPath 定义表达式以遍历 JSON 文档以 提取 JSON 的子集

你能得到的只是“原始 JSON 的一个子集”。 JSONPath 的结果始终是 JSON。由于truefalse 不是有效的JSON,因此您无法取回它们中的任何一个。您可以取回包含 truefalse 的 JSON 结构,但前提是这些值在原始 JSON 中。

这里通常做的是取回生成的 JSON,然后对其进行测试以确定它是否符合某些条件。在您的情况下,您希望始终返回一组路径。您的标准是“结果列表是否为空?”。因此,您需要测试您返回的列表是否为空或未达到truefalse 的“固定值”。

【讨论】:

  • 感谢@Steve,不幸的是,我在这里没有使用任何编程语言,如 Java 或 Python。该表达式正在 Terraform 中执行,并且 JsonPath 表达式选择的值必须与另一个字段中指定的硬编码值匹配。因此,如果任何数组元素以 test/ 或 not 开头,只要我可以从 JsonPath 表达式中获得一个常量值,那么我就可以将它与另一个值进行比较。正如您所提到的,有什么方法可以测试“结果列表是否为空?”在 JsonPath 中?
  • 你能测试一下“[]”吗? - 我认为您可以,因为我希望您处理的是 JSON 字符串而不是扩展形式。同样,它不能是 JSONPath 的东西。它必须是一个 Terraform 的东西。我喜欢 Terraform,但我没有用它做任何花哨的事情,当然也没有遇到这个问题 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 2013-02-07
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多