'JQ- print specific key value pair

I have this 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"
}

I want to print key value pairs of where the key matches to state and options and also the time and its value. I am able to print the time and all key value pairs by using below command, but not sure how to extract specific key value pairs.

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

This gives the output:

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

But my desired output is:

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


Solution 1:[1]

One solution to the stated problem would be:

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

However, it would almost certainly be better to modify the requirements slightly so that the output format is less idiosyncratic. This should also make it easier to formulate a cleaner (e.g. only-jq) solution.

Solution 2:[2]

You can use @csv (comma separated values).

Filter

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

Input

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

Output

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

Demo

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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 peak
Solution 2 Logan Lee