我有以下JSON对象
{"color": "red", "shapes": [ "square", "triangle" ]}
我想使用以下条件使用jq验证JSON对象:
返回的结果应为 true 或 false 。
我有2个jq命令可以验证这两个条件,但我不确定如何将它组合成1个表达式:
json='{"color": "red", "shapes": [ "square", "triangle" ]}'
echo "$json" | jq '.["color"] | test("red")'
echo "$json" | jq 'any(.shapes[]; contains("round"))|not'
任何指示或帮助都将不胜感激。
答案 0 :(得分:2)
您可以使用all
简单验证两个测试都返回true:
echo '{"color": "red", "shapes": [ "square", "triangle" ]}' |
jq '[(.["color"] | test("red")),
(any(.shapes[]; contains("round"))|not)
] | all'
创建一个包含每个测试结果的数组,然后将该数组传递给all
。
答案 1 :(得分:2)
测试一组条件的正确方法是使用and
。
在您的情况下,正确的测试将是:
(.color == "red") and (.shapes|index("round") == null)
示例(打字稿):
jq '(.color == "red") and (.shapes|index("round") == null)'
{"color": "red", "shapes": [ "square", "triangle" ]}
true
在jq中,not
是一个语法上普通的过滤器,因此您可以将第二个条件写为:(.shapes | index("round") | not)
。