JSON JQ 如果没有 else

标签 json if-statement syntax jq

我使用以下 JQ 命令来过滤 JSON。我的要求是,如果存在预期的节点,则过滤掉 JSON 消息。否则,什么也不做。因此,我使用 if、elif、...

sed -n "s/.*Service - //p" $1/response.log* |
  jq "if (.requests | length) != 0 then .requests |= map(select(.id == \"123\"))
      elif (.result | length ) != 0  then .result |= map(select(.id== \"123\")) 
      else " "  end" > ~/result.log

看起来 else 在这里是强制性的。我不想在 else block 内做任何事情。无论如何,我可以忽略 else 或只是在 else 内打印一些空白。

在上面的情况下,它在结果文件中打印双引号“”。

最佳答案

你可能想使用这个习语:

if CONDITION then WHATEVER else empty end

empty 是一个不输出任何内容的过滤器——甚至不输出 null,毕竟它是一些东西(即 JSON 值)。它有点像黑洞,只是更黑——它会消耗它提供的任何东西,但与黑洞不同的是,它甚至不发射霍金辐射。

在您的情况下,您有一个“elif”,因此使用“elseempty”可能就是您想要的,但作为引用,上面的内容完全等同于:

select(CONDITION) | WHATEVER

附注我的猜测是,无论 sed 命令的目标是什么,它都可以作为 jq 程序的一部分更可靠地完成,也许使用 walk/1

更新

jq 1.6发布后,进行了更改,使得“if without else”具有“if _ then _ else . end”的语义,即:

if P then Q end === if P then Q else 。结束

关于JSON JQ 如果没有 else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29949184/

相关文章:

javascript - Json 解析并总结 json 内的值

ios - 不能对类型为 'Any' SWIFT 的非可选值使用可选链接

javascript - 如何在javascript中反序列化JSON时间跨度

wordpress - 解码失败: Syntax error Magento

Pythonic 宏语法

php - 访问 JSON 对象的值

if-statement - Google Sheets的查询+IFS函数

python - 如何使用for循环,if-else合并两个文件?

c - if 运算中的 OR 运算

Java For-Each 循环 : Sort order