linux下的json命令行工具–jq

jq是一个很轻量却很强大的命令行下的json解析器。jq是json中的“sed”命令,它可以用来slice、filter、map、transform json数据。jq是用C编写的,它没有其他依赖,你可以直接下载一个可执行文件,然后拷贝到其他机器上去执行,完全没有问题。

安装

jq用C语言编写,运行时无需其他依赖,它几乎可以运行在任何平台上。如果你是Linux、OS X、或者Windows,可以直接下载二级制版本。

二进制版本知己可以运行,但是在OS X、和Linux上,记得chmod +x jq

  • jq 1.5已经集成到Debian和Ubuntu的官方源中,运行sudo apt-get install jq即可
  • jq 1.5已集成到Fedora的官方源中,运行sudo dnf install jq即可
  • jq 1.4已经集成到openSuse官方源中,运行sudo zypper install jq即可
  • Arch用户,已经在AUR中准备了PKGBUILD,参考ArchWiki去安装
  • 更多

语法

github上有一个json的接口,调用它会得到一串json,下面的例子就使用这串json数据。

    curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5'

上面的接口已经返回了格式化好的json串,如果没有,我们可以使用jq,格式化一下:

    curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.'

我们还可以只取其中的第一条数据:

    curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.[0]'

只取某些特定的字段,下面是取出第一个数据中的,commit节点下的message字段和commit节点下的committer节点下的name字段:

    curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' | jq '.[0] | {message: .commit.message, name: .commit.committer.name}'

    //结果

    {

        "message": "Merge pull request #162 from stedolan/utf8-fixes\n\nUtf8 fixes. Closes #161",

        "name": "Stephen Dolan"

    }

.[0]取得了JsonArray中的第一个元素;.commit.message取得了json中具体的属性值.

    jq '.[] | {message: .commit.message, name: .commit.committer.name}'

取出全部的commit:

    jq '.[] | {message: .commit.message, name: .commit.committer.name}'

.[] 取出全部的元素,然后将相应的字段赋值给message,name.

如果想把上面的结果放在Array里,我们可以这样:

    jq '[.[] | {message: .commit.message, name: .commit.committer.name}]'

    //结果

    [

        {

            "message": "Merge pull request #163 from stedolan/utf8-fixes\n\nUtf8 fixes. Closes #161",

            "name": "Stephen Dolan"

        },

        {

            "message": "Reject all overlong UTF8 sequences.",

            "name": "Stephen Dolan"

        }

    ]

多点击此处 https://stedolan.github.io/jq/manual/

版权声明

本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。

© 空空博客,本文链接:https://www.yeetrack.com/?p=1201