问题描述
我有一个简单的JSON(如下)。修改后的数组元素中的内容可能会有所不同。每当修改后的元素至少具有一个以'test /'开头的文件名时,我需要一个固定的输出;如果没有一个文件以'test /'开头的文件,则我需要一个固定的输出。我需要使用JsonPath做到这一点。
到目前为止,我使用过的所有表达式(例如 $。commits []。 [?(@ =〜/test.*?/i)]) )会为我提供文件列表(如果表达式匹配),我需要设置一个固定值( true 或 false ),而不是修改后的[]元素值,如果修改后的元素中的任何数组元素均以 'test' 。
任何帮助将不胜感激。
{"commits":[{"modified":["test/db/ecs-db.sql","test/infra/infra-settings.json","test1/code/code.java"]}]}
解决方法
JSONPath的定义是:
JSONPath定义表达式以遍历JSON文档以 提取JSON的子集
您可以得到的只是“原始JSON的子集”。 JSONPath的结果始终是JSON。由于true
和false
不是有效的JSON,因此您无法取回它们中的任何一个。您可以获取一个包含true
或false
的JSON结构,但前提是这些值位于原始JSON中。
通常在这里完成的工作是获取结果JSON,然后进行测试以确定它是否符合某些条件。在您的情况下,您希望总是返回一系列路径。您的标准是“结果列表是否为空?”。因此,您需要测试返回的列表是否为空,或者得出true
或false
的“固定值”。