jq JSON Cheatsheet

jq sed for JSON data

Installation

$ sudo dnf install jq         # Fedora
$ brew install jq             # MacOS
$ winget install jqlang.jq    # Windows

$ winget upgrade jq -s winget # Upgrading on Windows

Basic Usage

$ echo '{"fruit":{"name":"apple","color":"green","price":1.20}}' | jq '.'
{
  "fruit": {
    "name": "apple",
    "color": "green",
    "price": 1.20
  }
}

$ curl --no-progress-meter http://api.open-notify.org/iss-now.json | jq '.'
{
  "iss_position": {
    "longitude": "158.4700",
    "latitude": "-2.8688"
  },
  "message": "success",
  "timestamp": 1700410500
}

JSON Example

$ cat flintstones.json
{
    "family": "Flintstones",
    "members": [
        { "Name": "Fred", "Age": 35, "Gender": "male" },
        { "Name": "Wilma", "Age": 25, "Gender": "female" },
        { "Name": "Pebbles", "Age": 1, "Gender": "female" },
        { "Name": "Dino", "Age": 5, "Gender": "male" }
    ]
}

Pretty print (in color)

$ jq '.' flintstones.json
{
  "family": "Flintstones",
  "members": [
    {
      "Name": "Fred",
      "Age": 35,
      "Gender": "male"
    },
    {
      "Name": "Wilma",
      "Age": 25,
      "Gender": "female"
    },
    {
      "Name": "Pebbles",
      "Age": 1,
      "Gender": "female"
    },
    {
      "Name": "Dino",
      "Age": 5,
      "Gender": "male"
    }
  ]
}
$ jq '.members' flintstones.json
[
  {
    "Name": "Fred",
    "Age": 35,
    "Gender": "male"
  },
  {
    "Name": "Wilma",
    "Age": 25,
    "Gender": "female"
  },
  {
    "Name": "Pebbles",
    "Age": 1,
    "Gender": "female"
  },
  {
    "Name": "Dino",
    "Age": 5,
    "Gender": "male"
  }
]

Filtering

$ jq '.members[].Name' flintstones.json
"Fred"
"Wilma"
"Pebbles"
"Dino"
$ jq '.members[] | .Name' flintstones.json
"Fred"
"Wilma"
"Pebbles"
"Dino"

$ jq '.members[].Name,.members[].Age' flintstones.json
"Fred"
"Wilma"
"Pebbles"
"Dino"
35
25
1
5
$ jq '.members[] | .Name,.Age' flintstones.json
"Fred"
35
"Wilma"
25
"Pebbles"
1
"Dino"
5

$ jq '.members[1].Name,.members[1].Age' flintstones.json
"Wilma"
25

Keys and lengths

$ jq '. | keys' flintstones.json
[
  "family",
  "members"
]
$ jq '.members[0] | keys' flintstones.json
[
  "Age",
  "Gender",
  "Name"
]
$ jq '. | length' flintstones.json                        # 2
$ jq '.members | length' flintstones.json                 # 4
$ jq '.members[] | length' flintstones.json               # 3 3 3 3
$ jq '.members[].Name | length' flintstones.json          # 4 5 7 4