使用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舒服了!
$ jq . package.json
{
"scripts": {
"test": "grunt test"
},
"engines": {
"node": ">=0.10.0"
},
"devDependencies": {
"karma-ng-html2js-preprocessor": "^0.1.0",
"karma": "^0.12.19",
"grunt-karma": "^0.8.3",
"karma-ng-scenario": "^0.1.0",
"time-grunt": "~0.2.1",
"load-grunt-tasks": "~0.4.0",
"jshint-stylish": "~0.1.3",
"grunt-usemin": "~2.0.0",
"grunt-svgmin": "~0.2.0",
"grunt-rev": "~0.1.0",
"grunt-ngmin": "~0.0.2",
"grunt-newer": "~0.6.1",
"grunt-contrib-connect": "~0.5.0",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-compass": "~0.7.2",
"grunt-contrib-clean": "~0.5.0",
"grunt-concurrent": "~0.5.0",
"grunt-bower-install": "~1.0.0",
"grunt-autoprefixer": "~0.4.0",
"grunt": "~0.4.1",
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-cssmin": "~0.7.0",
"grunt-contrib-htmlmin": "~0.1.3",
"grunt-contrib-imagemin": "~0.3.0",
"grunt-contrib-jshint": "~0.7.1",
"grunt-contrib-uglify": "~0.2.0",
"grunt-contrib-watch": "~0.5.2",
"grunt-google-cdn": "~0.2.0"
},
"dependencies": {},
"version": "0.0.0",
"name": "myyo"
}
二、高速查询JSON数据
利用 jq 可以以 key 作为keyword来对 JSON 作出高速查询, 比如:
$ jq .version package.json
"0.0.0"
jq 的键查询也支持链式调用,如:
$ jq .scripts.test package.json
"grunt test"
三、jq的管道操作
熟悉命令行的朋友可能都知道 | (管道)是一个很强大的 武器。幸运的是,jq 也提供了对管道的支持。
$ jq '.devDependencies|{ karma }' package.json
{
"karma": "^0.12.19"
}
在这里,我们使用管道过滤并构造出karma对象
四、总结
假设你须要在命令行下处理 JSON,我强烈推荐 jq。jq 不仅 可以满足一般性的常见需求,更包括运算、内置函数、条件比較、 变量声明、自定函数等强大功能。很多其它内容可以通过 jq 的官方手冊进行学习。
使用jq工具在Shell命令行处理JSON数据的更多相关文章
- 【AMAD】watchdog -- 用于监控文件系统的事件,并且提供了shell命令行工具
简介 动机 作用 用法 个人评分 简介 用于监控文件系统的事件的Python库,并且提供了shell命令行工具 动机 有很多情况下,我们希望监控文件的变化,在变化之后作出一些响应. 比如flask,d ...
- Shell 命令行求两个文件每行对比的相同内容
Shell 命令行求两个文件每行对比的相同内容 遇到的一个实际问题是,2017年08月01日起,所有未经实名的域名,全部停止解析.而我手上有不少域名,其中很多都是没有实名的.但我不知道哪些实名了,哪些 ...
- 几种在shell命令行中过滤adb logcat输出的方法
我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adblog ...
- 自学Linux Shell2.1-进入shell命令行
点击返回 自学Linux命令行与Shell脚本之路 2.1-进入shell命令行 进入文本命令行界面(CLI)两种方法: 控制台终端 图形化终端 1. 通过Linux控制台终端访问CLI 按下Ctrl ...
- Hadoop HDFS的shell(命令行客户端)操作实例
HDFS的shell(命令行客户端)操作实例 3.2 常用命令参数介绍 -help 功能:输出这个命令参数手册 -ls 功能:显示目录信息 示例: hadoop fs ...
- Cordova - Windows版本图形界面管理工具,告别命令行输入方式!
Cordova本身提供的是命令行管理工具,并没有提供图形界面管理工具,虽然命令行管理工具可以完成所有Cordova管理,但是对于我这种懒蛋,可真不希望每次都输入命令,而且我更担心一旦输错一个字符,命令 ...
- Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本
Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本 在 mac 或者 linux 系统中,我们的浏览器或者其他下载软件下载的文件全部都下载再 ~/Downloads/ 文 ...
- HDFS shell命令行常见操作
hadoop学习及实践笔记—— HDFS shell命令行常见操作 附:HDFS shell guide文档地址 http://hadoop.apache.org/docs/r2.5.2/hadoop ...
- Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本
Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本 不知道为什么,我总想用 Shell 脚本来实现把一个站点内容给下载下来.但是下载什么站点我确不知道.今天尝试了一下利用 curl ...
随机推荐
- frameset标签代码实现网站跳转
js代码1: document.writeln("<frameset rows=\"0, *\">"); document.writeln(&quo ...
- 自定义函数中的参数返回值 “-> (Int -> Int)”的问题
func makeIncrementer() -> (Int -> Int) { func addOne(number: Int) -> Int { + number } retur ...
- apache 网址重定向
参考了以下网站,终于基本搞定b2c网站伪静态.剩下的就是体力活了. 回家后整理下. http://yp.oss.org.cn/software/show_resource.php?resource_i ...
- Ubuntu14.04不支持U盘exfat格式该如何解决
转: http://www.jb51.net/os/Ubuntu/275158.html exfat是U盘的文件系统,很多系统都支持exfat格式的使用,但Ubuntu系统并不支持exfat格式,要如 ...
- Day21 Django之Form文件上传、原生Ajax和实现抽屉实例
一.Form文件上传 """ Django settings for prev_chouti project. Generated by 'django-admin st ...
- #Leet Code# LRU Cache
语言:C++ 描述:使用单链表实现,HeadNode是key=-1,value=-1,next=NULL的结点.距离HeadNode近的结点是使用频度最小的Node. struct Node { in ...
- partial函数-python学习
一个函数可以有多个参数,而在有的情况下有的参数先得到,有的参数需要在后面的情景中才能知道,python 给我们提供了partial函数用于携带部分参数生成一个新函数. def add(a,b,c=2) ...
- Java客户端协议处理框架简介
无论FTP客户程序,还是HTTP客户程序,或是其他基于特定应用层协议的客户程序,在与远程服务器通信时,都需要建立与远程服务器的连接,然后发送和接收与协议相符的数据.客户程序还需要对服务器发送的数据进行 ...
- js将数字转换成大写的人民币表达式
function changeNumMoneyToChinese(money) { var cnNums = new Array("零", "壹", " ...
- clang: error: invalid deployment target for -stdlib=libc++ (requires iOS 5.0 or later)
低于5.0版本的不支持设置成 或 在Xcode中做如下配置 静态库工程也要做同样设置