JSON是一种轻量级、语言无关的数据存储格式,大多数编程语言都能解析,对程序员也非常友好。我们在通信/数据交互时经常使用JSON格式。但是我们在存储数据的时候,JSON格式是一行数据存储的,读取起来会比较困难。所以,为了方便阅读,我们可以使用一些方法来格式化JSON数据。在各种编程语言中,都会有一些对应的库来为我们解析JSON数据,比如C语言中的cjson,Python中的json.tool等。那么在Linux平台下,有没有什么工具可以不用编程直接格式化/解析JSON数据呢?答案当然是可以的,这个工具就是jq。jq是一个命令行处理JSON数据的工具。它可以接受标准输入,命令管道或文件中的JSON数据,经过一系列过滤器(filters)和表达式转换,形成我们需要的数据结构,并将结果输出到标准输出。jq的这个特性让我们可以很方便的在shell脚本中调用它。安装jq工具有些发行版已经内置了jq工具,但有些则没有。如果没有内置这个工具,我们需要手动安装。各平台安装方法如下:ArchLinux平台:sudopacman-SjqDebian、Ubuntu、LinuxMint平台:sudoapt-getinstalljqFedora:sudodnfinstalljqOpenSUSE:sudozypperinstalljq其他平台安装,需要查看他们的官方安装说明手册。使用jq工具格式化JSON数据。例如,我们现在有以下JSON数据:{"firstName":"Liangxu","lastName":"Yan","age":18,"address":{"streetAddress":"212ndStreet","city":"广州","province":"广东省","postalCode":"510655"},"phoneNumber":[{"type":"home","number":"020555-1234"},{"type":"company","number":"020555-4567"}],"gender":{"type":"male"}}看得头晕吧?这不容易阅读,是吗?我们先把这个文件保存为liangxu.json文件,然后用jq工具格式化一下,方便我们阅读:catliangxu.json|jq'.'output:{"firstName":"Liangxu","lastName":"Yan","age":18,"address":{"streetAddress":"212ndStreet","city":"广州","省":"广东省","postalCode":"510655"},"phoneNumber":[{"type":"home","number":"020555-1234"},{"type":"company",“号码”:“020555-4567”}],“性别”:{“类型”:“男性”}}'。是jq工具最简单的表达方式,不改变输入,输出精美,便于阅读和理解。在以下情况下,我们使用这些数据作为分析对象。使用jq工具解析特定字段在上面的示例JSON数据中,如果我们想解析出地址字段,我们可以像这样使用jq工具:jq.addressliangxu.jsonoutput:{"streetAddress":"212ndStreet","city":"Guangzhou","province":"Guangdong","postalCode":"510655"}接下来我们进一步分析地址中的邮编,我们用管道来做。猫liangxu.json|jq.address.postalCodeOutputresult:"510655"请注意,使用jq命令时,过滤器是区分大小写的,所以在解析字段的时候,一定要和原字段严格一致,否则不起作用解析。使用jq工具解析数组中的元素在JSON数据中,数组就是用方括号括起来的一组元素。如果我们要解析数组中的元素,就需要用到数组中的下标。在示例JSON数据中,phonenumber字段存储的内容是一个数组。如果我们想得到这个数组中的所有元素,只需要加上一对方括号即可,如下:jq.phoneNumber[]liangxu.json输出结果:{"type":"home","number":"020555-1234"}{"type":"company","number":"020555-4567"}如果我们要过滤掉数组的第一个元素,可以加上下标[0]:jq。phoneNumber[0]liangxu.jsonoutputresult:{"type":"home","number":"020555-1234"}jq工具内置函数jq工具为我们提供了很多内置函数,这里有其中两个:钥匙和有。keykeys用于获取JSON中的关键元素,并找到JSON数据中的所有键。猫liangxu.json|jq'keys'output:["address","age","firstName","gender","lastName","phoneNumber"]hashas用于判断JSON数据key中是否存在key,其输出为对或错。猫liangxu.json|jq'has("alvin")'output:false总结以上是jq工具的基本用法。jq不仅可以满足一般的通用需求,还包括运算、内置函数、条件比较、变量声明、自定义函数等强大的功能。对此感兴趣的朋友不妨通过jq的官方手册进行学习。最后,最近有很多朋友找我要一份Linux学习路线图,所以我结合自己的经验,利用业余时间熬夜一个月,整理了一本电子书。无论你是面试还是自我提升,相信都会对你有所帮助!免费送给大家,只求大家给我点个赞!电子书|LinuxDevelopmentLearningRoadmap也希望有小伙伴可以加入我的行列,把这本电子书做得更加完美!获得?希望老铁们来个三连击,让更多人看到这篇文章。推荐阅读:干货|程序员和高级架构师免费发送工件的必备资源|支持搜索的资源网站
