程序员必备命令之-Json数据处理命令jq

2024-01-02 09:32:14

遇到json格式的数据你会怎么办,是自己编写程序处理,还是去搜索在线的json格式处理网站。这些方式都不是很方便,或者说功能不够强大,本文将介绍强大的jq命令来帮助程序员灵活处理各种json数据。

jq简介

jq是一个Json格式数据处理命令,能够对json数据格式进行增删改查,jq的主要功能如下:

  • 格式化输出: jq支持将JSON数据格式化为人类可读的形式,支持高亮等操作提高可读性。
  • 查询和过滤: jq支持丰富的查询语法来过滤和提取JSON数据中的特定部分,从而简化数据处理过程。
  • 修改和更新: jq不仅可以查询数据,还支持特定的语法来修改JSON结构,实现数据更新的目的。
  • 结合管道: jq支持与其他命令和工具结合使用,例如curl、grep等,实现更复杂的数据处理流程。
  • 变量和函数: jq支持变量和函数的使用,使得用户能够编写更灵活和复杂的jq脚本。

在大多数Linux系统中,jq可以通过包管理器直接安装,例如centos使用如下命令安装:

sudo yum install jq

如果想要使用最新的jq,可以到github上去下载,自行编译安装,见这里

json格式简介

在介绍jq命令的使用方法之前,有必要简单介绍一下json的数据格式。json格式的文件主要包含对象和数据,如下:

  • 对象: JSON对象是由一组键值对构成的无序集合,用花括号{}表示。对象的元素可以是字符串、数字、布尔值和null、对象、数组等。
  • 数组:JSON数组是有序的值列表,用方括号[]表示。数组的元素可以是字符串、数字、对象、布尔值和null、数组,对象等。

因此使用jq命令也是主要围绕着对象和数组进行处理的。

jq使用举例

本文以firefox流量器的extensions.json文件的内容为例进行介绍,extensions.json文件存储了firefox安装的插件信息。如下图为jq的help信息,将介绍其中主要的命令参数的用法。

图1

格式化输出举例

多数的时候针对json格式的文件,第一步就是要读懂json 格式的文件,如下:
在这里插入图片描述
图2
图2可以看到使用jq . 命令就会按照键值对的形式每行进行显示,我的shell还默认针对键值对进行了着色,比之cat,more等命令来说,更加容易理解json的格式。但是有一个缺点就是该文件的行数太多,如何快速的了解该Json文件的大致内容呢,见如下的查询部分。

查询和过滤举例

该文件比较大,有哪些键值对呢,如下:
在这里插入图片描述
图3
在这里插入图片描述
图4

  • 由于文件比较大,图3先试用keys过滤器过滤出该json文件有哪些键值,其中addons由图2可知是一个数据。
  • 因此使用.addons|length过滤器查询该数组的长度,需要注意的是其中的竖符号不是利用的shell的管道,而是jq内置的管道,所以该过滤器需要使用引号进行闭合,用来哦和shell管道符进行区分。
  • 知道了长度之后,可以该json文件主要由该数组中的每一个元素组成。由于屏幕无法显示完全,因此针对数组来说查看第一个数组的内容。
  • 图4则是查看数组中第一个对象包含哪些键值,同时查看addons数组中每一对象的id键值对应的值是什么,即firefox安装哪些扩展 。

通过图3和图4的命令,基本上对于该文件的层状结构有着整体的认识。其中涉及到过滤器中的keys,length,管道符|,数组[]等功能,关于jq更多的内置功能,详见这里

修改和更新举例

在这里插入图片描述
图5
图5是修改某个键的值,方法很简单,直接通过过滤器定位到对应的键值,然后赋值即可,需要注意的是,这种方式并没有修改源文件,如果想要修改文件,直接利用Linux的重定向符>输出到文件中即可。
在这里插入图片描述
图6
图6通过+号内置功能增加一行嵌套,但是由于只在数据的第一个元素中增加了一项,因此破坏数组的格式,不能再使用jq处理,因此使用head文本显示,可以看到数组addons[0]增加可一项,需要注意的是,这种方式并没有修改源文件,如果想要修改文件,直接利用Linux的重定向符>输出到文件中即可。
在这里插入图片描述
图7
图7通过del函数删除addons数组中的第一项,可以看到成功删除之后数组长度变短,同时查看删除后数据的第一个元素,和和图3不一样,因为他们的syncGUID是不一样的。

结合管道举例

Linux命令都是可以通过管道符|进行输入和输出的,如下:
在这里插入图片描述
图8
上述的图中都是通过jq直接读入文件,也可以通过cat命令传递给jq命令实现文件的读取,然后再输出给tail命令读取最后十行的内容

图形界面举例

除了命令行的方式,jq还提供图形界面的方式,像很多的在线网站一样,如下:
在这里插入图片描述
图9
UI界面针对少量的数据比较直观,针对大量的数据,没有命令行方便快捷。同时过个命令通过管道符进行配合可以实现的能力更为强大。

变量和函数举例

除了上述的功能之外,jq还支持更多的内置函数,正则匹配,变量定义,函数定义,条件判断即类似编程的条件判断语句,更为高级的特性请参考这里

本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里

文章来源:https://blog.csdn.net/javajiawei/article/details/135313082
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。