优秀的编程知识分享平台

网站首页 > 技术文章 正文

json小工具:神奇的jq(json jq)

nanyue 2024-10-23 12:01:42 技术文章 1 ℃

jq是一个非常神奇的、使用C编写的json小工具。支持Windows、Linux、Mac等平台。它可以用来格式化json输出,获取json中的某个field等等。配合其他命令行工具如curl等使用,非常的方便。

这里我们使用Linux为例。

首先安装jq:

# apt-get install jq -y

安装完之后,我们来试一下下面的小例子:

echo '{"a": 123, "b": 456}'
{"a": 123, "b": 456}
# echo '{"a": 123, "b": 456}' | jq
{
  "a": 123,
  "b": 456
}

可以看到,在使用了jq之后,json被格式化输出了,按起来舒服多了。

下面我们来尝试一个复杂一点的例子:

# curl -s https://api.github.com/repos/nextcloud/docker/branches
[
  {
    "name": "github-actions",
    "commit": {
      "sha": "89152af3ac3c27db4172ccb21fb84cfd3dcdca64",
      "url": "https://api.github.com/repos/nextcloud/docker/commits/89152af3ac3c27db4172ccb21fb84cfd3dcdca64"
    },
    "protected": false
  },
  {
    "name": "master",
    "commit": {
      "sha": "ba1500b05ee8889c99a46f1d0de63ab40d3e2926",
      "url": "https://api.github.com/repos/nextcloud/docker/commits/ba1500b05ee8889c99a46f1d0de63ab40d3e2926"
    },
    "protected": true
  }
]

然后我们尝试一下,只取返回的数组的第一项:

# curl -s https://api.github.com/repos/nextcloud/docker/branches | jq '.[0]'
{
  "name": "github-actions",
  "commit": {
    "sha": "89152af3ac3c27db4172ccb21fb84cfd3dcdca64",
    "url": "https://api.github.com/repos/nextcloud/docker/commits/89152af3ac3c27db4172ccb21fb84cfd3dcdca64"
  },
  "protected": false
}

很方便,是不是,下面我们尝试获取第一项里面的commit的sha值,同样很容易:

# curl -s https://api.github.com/repos/nextcloud/docker/branches | jq '.[0].commit.sha'
"89152af3ac3c27db4172ccb21fb84cfd3dcdca64"

我们注意到,返回的字符串是带双引号的,我们尝试带上-r参数(raw),这样输出就不带双引号了:

# curl -s https://api.github.com/repos/nextcloud/docker/branches | jq '.[0].commit.sha' -r
89152af3ac3c27db4172ccb21fb84cfd3dcdca64

还可以根据你获取的字段生成新的json:

# curl -s https://api.github.com/repos/nextcloud/docker/branches | jq '.[0] | {sha_id: .commit.sha, name: .name}'
{
  "sha_id": "89152af3ac3c27db4172ccb21fb84cfd3dcdca64",
  "name": "github-actions"
}

如果你想要在shell里面处理json,jq将是一个非常不错的选择。

赶紧试试吧。

最近发表
标签列表