当前位置: 首页 > 知识库问答 >
问题:

JQ-打印特定的键值对

有德业
2023-03-14

我有这个JSON:

{
    "time": "2022-02-28T22:00:55.196Z",
    "severity": "INFO",
    "params": [
        {"key": "state", "value": "pending"},
        {"key": "options", "value": "request"},
        {"key": "description", "value": "[FILTERED]"}
    ],
    "content_length": "231"
}

我想打印键值对,其中键匹配状态和选项,以及时间和它的值。我可以通过使用下面的命令打印时间和所有键值对,但不确定如何提取特定的键值对。

jq '"time:\(.time)" ,[.params[] | "key:\(.key)" ,"value:\(.value)"]' test.json

这将产生以下输出:

"time:2022-02-28T22:00:55.196Z"
[
  "key:state",
  "value:pending",
  "key:options",
  "value:request",
  "key:description",
  "value:[FILTERED]"
]

但我想要的结果是:

"time:2022-02-28T22:00:55.196Z"
  "key:state",
  "value:pending",
  "key:options",
  "value:request"

共有1个答案

苏乐
2023-03-14

解决上述问题的一个办法是:

< test.json jq ' 
  "time:\(.time)",
  [.params[] | select(.key|IN("state","options"))
   | "key:\(.key)" ,"value:\(.value)"]
' | sed '/^[][]$/d'

然而,几乎可以肯定的是,最好稍微修改一下需求,这样输出格式就不那么特殊了。这也应该更容易制定一个更干净的解决方案(例如,仅仅-jq)。

 类似资料:
  • 问题内容: 我如何让 jq 像这样使用json: 并生成以下输出: 我对格式不感兴趣,只是不知道如何访问键名和值。 问题答案: 要将顶级键作为流获取,可以使用内置函数 。因此,针对您的特定问题的一种解决方案是: 按排序顺序生成密钥名称;如果要按原始顺序使用它们,请使用。 另一种以原始顺序生成密钥的替代方法是: CSV和TSV输出 @csv和@tsv过滤器在这里也可能值得考虑,例如 产生: 嵌入式对

  • 问题是如何使用方法在HashMap中pritn值=1的图书?在代码中,ive删除了数组中的书籍,这样代码就可以更短。

  • 我有一个如下数组: 我想做的是找到重复的值,并打印它们。 所以我这样做的方法是转换到,然后转换到,并在上使用。 然后,我使用一个循环通过它,并使用。 这当然会把它们全部打印出来,即使计数是一。 我想加入

  • 我创建了一个带有整数类型键的映射,值是字符串集。我已经用一些测试数据填充了映射,现在需要编写一个方法来打印映射的内容,例如“key: value, value, value” 我假设迭代映射,并将键分配给int变量并打印出来是如何开始的,但是我该如何打印字符串集中的值呢?

  • 问题内容: 我有一个PDF文档,我想用我的python应用程序打印它。 我在这里尝试了解决方案(使用python的win32print模块打印PDF文档吗?),但是当我安装Ghostscript 9.15(即实际版本)时,它没有 我使用该命令的方式起作用,但是它会打开默认查看器(我的浏览器是Adobe Reader),并且在打印后它仍然保持打开状态,试图通过杀死其他打开的窗口来终止该进程,但我不希

  • 问题内容: Java中有什么方法可以打印到特定的IPP打印机?我发现所有示例代码和教程都集中在如何使用以下类似内容打印特定类型的文档上: 此代码段仅打印到找到的第一台能够打印文档的打印机。就我而言,我想通过其URI查找打印机,但似乎不支持此功能。我尝试使用,而不是,并添加了一个属性,但这不会返回任何打印机。我怀疑查找服务正在寻找可以更改其目标URI的打印机,而不是寻找具有该URI的打印机。 作为最