Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jq组合验证JSON内容的多个测试_Json_Linux_Bash_Jq - Fatal编程技术网

使用jq组合验证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

我有以下JSON对象

{"color": "red", "shapes": [ "square", "triangle" ]}
我想使用以下条件验证JSON对象:

  • 颜色有“红色”的价值
  • 形状不包含值“round”
返回的结果应该是truefalse

我有2个jq命令,用于验证这两个条件,但我不确定如何将其组合为1个表达式:

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的答案是首先应该如何构建表达,并且可能对未来的读者更有教育意义。