使用jq组合验证JSON内容的多个测试
我有以下JSON对象使用jq组合验证JSON内容的多个测试,json,linux,bash,jq,Json,Linux,Bash,Jq,我有以下JSON对象 {"color": "red", "shapes": [ "square", "triangle" ]} 我想使用以下条件验证JSON对象: 颜色有“红色”的价值 形状不包含值“round” 返回的结果应该是true或false 我有2个jq命令,用于验证这两个条件,但我不确定如何将其组合为1个表达式: json='{"color": "red", "shapes": [ "square", "triangle" ]}' echo "$json" | jq '.["c
{"color": "red", "shapes": [ "square", "triangle" ]}
我想使用以下条件验证JSON对象:
- 颜色有“红色”的价值
- 形状不包含值“round”
json='{"color": "red", "shapes": [ "square", "triangle" ]}'
echo "$json" | jq '.["color"] | test("red")'
echo "$json" | jq 'any(.shapes[]; contains("round"))|not'
任何提示或帮助都将不胜感激。您只需使用
all
验证这两个测试是否返回true即可:
echo '{"color": "red", "shapes": [ "square", "triangle" ]}' |
jq '[(.["color"] | test("red")),
(any(.shapes[]; contains("round"))|not)
] | all'
创建一个包含每个测试结果的数组,然后将该数组导入
all
您只需使用all
验证这两个测试是否返回true即可:
echo '{"color": "red", "shapes": [ "square", "triangle" ]}' |
jq '[(.["color"] | test("red")),
(any(.shapes[]; contains("round"))|not)
] | all'
创建一个包含每个测试结果的数组,然后将该数组输送到
all
测试条件集合的正确方法是使用和
在您的情况下,正确的测试应该是:
(.color == "red") and (.shapes|index("round") == null)
示例(类型脚本):
在jq中,not
是一个语法上普通的过滤器,因此您可以将第二个条件写为:(.shapes | index(“round”)| not)
测试条件集合的正确方法是使用和
在您的情况下,正确的测试应该是:
(.color == "red") and (.shapes|index("round") == null)
示例(类型脚本):
在JQ中,<>代码>不是/<代码>是一个语法上普通的过滤器,所以你可以把第二个条件写为:<代码>(形状>索引(“圆”)不)< /> >。不过,提示contiains
的tnx可能不是最佳选择。一个简单的等式可能更好。否则,“ground”
将失败。我只是复制了原始测试,因为我只是演示如何将两个测试合并为一个调用jq
。这确实正确地回答了问题。答案是使用给出的元素组成的,这些元素使其成为正确答案。尽管如此,@peak的答案是首先应该如何构造表达式,并且可能对未来的读者更有教育意义。contiains
可能不是最佳选择。一个简单的等式可能更好。否则,“ground”
将失败。我只是复制了原始测试,因为我只是演示如何将两个测试合并为一个调用jq
。这确实正确地回答了问题。答案是使用给出的元素组成的,这些元素使其成为正确答案。尽管如此,@peak的答案是首先应该如何构建表达,并且可能对未来的读者更有教育意义。