jq Cheat Sheet

jq 是一个强大的 JSON Query 命令行工具, 可以对 JSON 进行各种各样简单或复杂的操作. 当然 Linux 下用 Python 对 JSON 进行复杂的操作更容易, 对人类更友好. 但是 jq 作为高阶工具, 学会了能用简单的语法完成 90% 的操作.

Access a Value

{
    "name": "Alice",
    "profile": {
        "ssn": "1234-56-789",
        "numbers": [
            0, 1, 2
        ]
    }
}
$ cat data.json | jq '.name'
"Alice"

$ cat data.json | jq '.name' -r
Alice

$ cat data.json | jq '.name.profile' -r
1234-56-789

$ cat data.json | jq '.profile.numbers[0]' -r
0

$ cat data.json | jq '.profile.numbers[1]' -r
1
[
    {
        "id": 1,
        "name": "Alice"
    },
    {
        "id": 2,
        "name": "Bob"
    },
    {
        "id": 1,
        "name": "Cathy"
    }
]
$ cat data.json | jq '.[0]' -r
{
  "id": 1,
  "name": "Alice"
}

SELECT

[
    1,
    2,
    3
]
$ cat data.json | jq 'map(select(. == 1))' -r
[
    1
]
[
    {
        "id": 1,
        "name": "Alice"
    },
    {
        "id": 2,
        "name": "Bob"
    },
    {
        "id": 3,
        "name": "Cathy"
    }
]
$ cat data.json | jq 'map(select(.id == 1))[0].name' -r
Alice
{
    "data": [
        {
            "id": 1,
            "name": "Alice"
        },
        {
            "id": 2,
            "name": "Bob"
        },
        {
            "id": 3,
            "name": "Cathy"
        }
    ]
}
$ cat data.json | jq '.data | map(select(.id == 1))[0].name' -r
Alice

String Interpolation

[
    {
        "id": 1,
        "firstname": "Obama",
        "lastname": "Barrack"
    },
    {
        "id": 2,
        "firstname": "Trump",
        "lastname": "Donald"
    }
]
$ cat data.json | jq '[ { "fullname": .[] | "\(.firstname) \(.lastname)" } ]'
[
    {
        "fullname": "Obama Barrack"
    },
    {
        "fullname": "Trump Donald"
    }
]