繁体   English   中英

有条件的 output 使用 jq

[英]Conditional output using jq

我有 JSON 输入,如下所示。

  • {"value":{"error":"no such element","message":"no such element: xxx"}
  • {"value":null}

对于第二种情况,我想使用jq返回退出状态为 0 (不打印任何内容),并且no such element: xxx到 stderr 并为第一种情况返回退出状态 1 。

我不确定如何在jq中实现这一点。 任何人都可以告诉我如何做到这一点的jq代码吗? 谢谢。

指定退出代码的一种方法是使用内置过滤器halt_error 据我了解,为了满足您的规格,您可以这样写:

 .value
 | if . then .error | halt_error(1)
   else null | halt_error(0)
   end

请参阅jq 手册了解详细信息并探索变体(例如添加“\n”)。

我理解这个问题的方式(以及我在遇到这个问题之前一直在寻找的东西)是你希望jq程序根据首先读取的输入类型以不同的状态码退出。

文件.json

{"value":{"error":"no such element","message":"no such element: xxx"}}
{"value":null}

使用内置的halthalt_error ,您可以做到这一点:

jq -n 'inputs | .value | if .error then "\(.message)\n" | halt_error(1) else halt end' < file.json

这与当前答案之间的唯一区别是jq在读取第一个输入后实际上会退出,并且会忽略文件的 rest。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM