JQ- 打印特定键值对

JQ- print specific key value pair

我有这个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"

上述问题的一个解决方案是:

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

但是,稍微修改要求几乎肯定会更好,这样输出格式就不那么奇怪了。这也应该更容易制定更清洁的(例如 only-jq)解决方案。

您可以使用 @csv(逗号分隔值)。

过滤器

"time:\(.time)", 
(.params | 
[map(select(.key=="state" or .key=="options"))[] 
| "key:\(.key)", "value:\(.value)"] 
| @csv)

输入

{
    "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"
}

输出

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

演示

https://jqplay.org/s/F_3QP6-EvK