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