由于近期要处理一些 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数据的更多相关文章

  1. 【AMAD】watchdog -- 用于监控文件系统的事件,并且提供了shell命令行工具

    简介 动机 作用 用法 个人评分 简介 用于监控文件系统的事件的Python库,并且提供了shell命令行工具 动机 有很多情况下,我们希望监控文件的变化,在变化之后作出一些响应. 比如flask,d ...

  2. Shell 命令行求两个文件每行对比的相同内容

    Shell 命令行求两个文件每行对比的相同内容 遇到的一个实际问题是,2017年08月01日起,所有未经实名的域名,全部停止解析.而我手上有不少域名,其中很多都是没有实名的.但我不知道哪些实名了,哪些 ...

  3. 几种在shell命令行中过滤adb logcat输出的方法

    我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adblog ...

  4. 自学Linux Shell2.1-进入shell命令行

    点击返回 自学Linux命令行与Shell脚本之路 2.1-进入shell命令行 进入文本命令行界面(CLI)两种方法: 控制台终端 图形化终端 1. 通过Linux控制台终端访问CLI 按下Ctrl ...

  5. Hadoop HDFS的shell(命令行客户端)操作实例

    HDFS的shell(命令行客户端)操作实例 3.2 常用命令参数介绍 -help 功能:输出这个命令参数手册 -ls                  功能:显示目录信息 示例: hadoop fs ...

  6. Cordova - Windows版本图形界面管理工具,告别命令行输入方式!

    Cordova本身提供的是命令行管理工具,并没有提供图形界面管理工具,虽然命令行管理工具可以完成所有Cordova管理,但是对于我这种懒蛋,可真不希望每次都输入命令,而且我更担心一旦输错一个字符,命令 ...

  7. Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本

    Shell 命令行,写一个自动整理 ~/Downloads/ 文件夹下文件的脚本 在 mac 或者 linux 系统中,我们的浏览器或者其他下载软件下载的文件全部都下载再 ~/Downloads/ 文 ...

  8. HDFS shell命令行常见操作

    hadoop学习及实践笔记—— HDFS shell命令行常见操作 附:HDFS shell guide文档地址 http://hadoop.apache.org/docs/r2.5.2/hadoop ...

  9. Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本

    Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本 不知道为什么,我总想用 Shell 脚本来实现把一个站点内容给下载下来.但是下载什么站点我确不知道.今天尝试了一下利用 curl ...

随机推荐

  1. php时间选择器亲测可以自己修改

    由于前端的离职  造成我需要自己去做后台页面   所以有一个要填写生日的我就用了这个时间选择器 <?php /** * Created by PhpStorm. * User: Administ ...

  2. codeforces 361 C - Mike and Chocolate Thieves

    Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u   Description Bad ...

  3. go bytes缓冲区使用介绍

    缓冲区原理简介: go字节缓冲区底层以字节切片做存储,切片存在长度len与容量cap, 缓冲区写从长度len的位置开始写,当len>cap时,会自动扩容.缓冲区读会从内置标记off位置开始读(o ...

  4. Streams and .NET

    http://www.codeguru.com/csharp/csharp/cs_data/streaming/article.php/c4223/Streams-and-NET.htm In thi ...

  5. The Derivation About CNN and Antoencoder

    The Derivation About CNN and Antoencoder 公式推导 本人用latex写的关于CNN和autoencoder的推导,前向和反向传播的推导都有证明.pdf下载地址T ...

  6. android开发之使用shape来画线,有一些注意点

    注意:Android3.0以上系统开始支持硬件加速特性hardwareAccelerated,默认是启用的.当你的某个activity用到了“虚线”效果的时候,必须要设置AndroidManifest ...

  7. SQL Server 阻塞分析

    一.加锁(locking).阻塞(blocking).死锁(deadlock)定义        加锁:用于管理多个连接的进程.当连接需要访问一块数据时,在这些数据上放置某种类型的锁.      阻塞 ...

  8. Gitolite 构建 Git 服务器

    Gitolite 构建 Git 服务器 Gitolite 构建 Git 服务器作者: 北京群英汇信息技术有限公司网址: http://www.ossxp.com/版本: 0.1-1日期: 2010-1 ...

  9. HDFS Block Replica Placement实现原理

    1. 背景   Block Replica Placement——数据块复本存储策略,HDFS Namenode以此为依据选取数据块复本应存储至哪些HDFS Datanodes,策略的设计需要权衡以下 ...

  10. java String 去除空格

    1. java 去掉字符串的空格(中间空格,左右空格) 比如 时间字符串,去掉‘-’,‘:’,与空格 String x = "2008-09-08 11:12:23"; x=x.r ...