我使用以下JQ命令过滤掉JSON.我的要求是,如果存在预期的 node ,则过滤掉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

看起来其他的都是强制性的.我不想在其他挡路里面做任何事情.不管怎么说,我可以忽略其他内容,或者在其他内容中打印一些空格.

在上述情况下,它会在结果文件中打印双引号"".

推荐答案

你可能想用这个成语:

if CONDITION then WHATEVER else empty end

empty是一个什么也不输出的过滤--甚至不是NULL,这毕竟是有东西的(即JSON值).它有点像黑洞,只是更黑--它会消耗它提供的任何东西,但与黑洞不同的是,它甚至不会emits 霍金辐射.

In your case, you have an "elif" so using "else empty" is probably what you want, but for reference, the above is exactly equivalent to:

select(CONDITION) | WHATEVER

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

使现代化

jq 1.6发布后,进行了一项更改,使"if without else"的语义为"if u then u else.end",即:

if P then Q end === if P then Q else . end

Json相关问答推荐

Jolt转换问题—使用键查找匹配对象

Swift解码错误类型与`Bool`type不一致

带有PowerShell内核的NewtonSoft json.Net的奇怪行为

使用PowerShell解析文件并获取特定行的值

在Ansible中从json中提取特定数据

使用Kotlin限制序列化类属性的允许整数值

PostgreSQL:删除 JSONB 数组中每个元素的特定键

通过 xslt 将内部 json 转换为 xml 时遇到问题

Powershell 7.2:ConvertFrom-Json - 日期处理

使用 SwiftUI 在 API 调用中解码嵌套 JSON 响应时遇到问题

如何在生产环境中更改 Flutter 应用程序中的数据模型?

在 json 嵌入的 YAML 文件中 - 使用 Python 仅替换 json 值

缺少所需的请求正文内容:org.springframework.web.method.HandlerMethod$HandlerMethodParameter

将 JSON 读取到 pandas 数据框 - ValueError:将 dicts 与非系列混合可能会导致排序不明确

规范化 JSON 文件

Django - 异常处理最佳实践和发送自定义错误消息

如何安装 json gem - 无法构建 gem 原生扩展(mac 10.10)

将 JsonArray 添加到 JsonObject

仅使用字符串和值解析 JSON 对象

如何遍历 JSON 中的条目?