使用jq工具在Shell命令行处理JSON数据

因为最近要处理一些 JSON 数据格式,一大早经过一番搜索后,最终找到了 jq 这个很棒的工具。jq 允许你直接在命令行下对 JSON 进行操作,包括分片、过滤、转换等等。

      首先在mac下安装jq,使用brew install jq就可以了,前提是安装了homebrew,如果在linux ubuntu下,应该可以使用sudo apt-get install jq安装。

让我们通过几个例子来说明 jq 的功能:
一、输出格式化,漂亮的打印效果
如果我们用文本编辑器打开 JSON,有时候可能看起来会一团糟,但是通过 jq 的 .(点)过滤器就可以立马让 JSON 的格式规整起来。
1.用文本编辑器打开后的样子

2.用 jq 显示的结果,以后在终端下看json舒服了!

 

[javascript] view plain copy
 
  1. $ jq . package.json   
  2. {  
  3.   "scripts": {  
  4.     "test": "grunt test"  
  5.   },  
  6.   "engines": {  
  7.     "node": ">=0.10.0"  
  8.   },  
  9.   "devDependencies": {  
  10.     "karma-ng-html2js-preprocessor": "^0.1.0",  
  11.     "karma": "^0.12.19",  
  12.     "grunt-karma": "^0.8.3",  
  13.     "karma-ng-scenario": "^0.1.0",  
  14.     "time-grunt": "~0.2.1",  
  15.     "load-grunt-tasks": "~0.4.0",  
  16.     "jshint-stylish": "~0.1.3",  
  17.     "grunt-usemin": "~2.0.0",  
  18.     "grunt-svgmin": "~0.2.0",  
  19.     "grunt-rev": "~0.1.0",  
  20.     "grunt-ngmin": "~0.0.2",  
  21.     "grunt-newer": "~0.6.1",  
  22.     "grunt-contrib-connect": "~0.5.0",  
  23.     "grunt-contrib-concat": "~0.3.0",  
  24.     "grunt-contrib-compass": "~0.7.2",  
  25.     "grunt-contrib-clean": "~0.5.0",  
  26.     "grunt-concurrent": "~0.5.0",  
  27.     "grunt-bower-install": "~1.0.0",  
  28.     "grunt-autoprefixer": "~0.4.0",  
  29.     "grunt": "~0.4.1",  
  30.     "grunt-contrib-copy": "~0.4.1",  
  31.     "grunt-contrib-cssmin": "~0.7.0",  
  32.     "grunt-contrib-htmlmin": "~0.1.3",  
  33.     "grunt-contrib-imagemin": "~0.3.0",  
  34.     "grunt-contrib-jshint": "~0.7.1",  
  35.     "grunt-contrib-uglify": "~0.2.0",  
  36.     "grunt-contrib-watch": "~0.5.2",  
  37.     "grunt-google-cdn": "~0.2.0"  
  38.   },  
  39.   "dependencies": {},  
  40.   "version": "0.0.0",  
  41.   "name": "myyo"  
  42. }  



 

二、快速查询JSON数据

利用 jq 能够以 key 作为关键字来对 JSON 作出快速查询, 例如:

 

[javascript] view plain copy
 
  1. $ jq .version package.json   
  2. "0.0.0"  


jq 的键查询也支持链式调用,如:

 

 

[javascript] view plain copy
 
  1. $ jq .scripts.test package.json   
  2. "grunt test"  



 

三、jq的管道操作

熟悉命令行的朋友可能都知道 | (管道)是一个非常强大的 武器。幸运的是,jq 也提供了对管道的支持。

 

[javascript] view plain copy
 
  1. $ jq '.devDependencies|{ karma }' package.json   
  2. {  
  3.   "karma": "^0.12.19"  
  4. }  


在这里,我们使用管道过滤并构造出karma对象

 

 

四、总结
如果你需要在命令行下处理 JSON,我强烈推荐 jq。jq 不仅 能够满足一般性的常见需求,更包含运算、内置函数、条件比较、 变量声明、自定函数等强大功能。更多内容可以通过 jq 的官方手册进行学习。

 

 

posted @ 2016-09-10 11:03  LABCD  阅读(2212)  评论(0)    收藏  举报