jq命令允许直接在命令行下对JSON进行操作,包括分片、过滤、转换等 ,jq是用C编写,没有运行时依赖,所以几乎可以运行在任何系统上。预编译的二进制文件可以直接在Linux、OS X和windows系统上运行,当然在linux和OS X系统你需要赋与其可执行权限;在linux系统中也可以直接用yum安装。

下载地址 https://stedolan.github.io/jq/download/

本文主要介绍其使用,默认是已经安装好的,没有安装的,请自行安装。

现在先准备json串,如下kumufengchun.json:

{"name":"kumufengchun","age":"18","city":"beijing","email":"kumufengchun@gmail.com","date":"Thursday","country":"China","company":["baidu","google","alibaba"]}"

如下test.json:

[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]

1.用jq .直接查看

jq . kumufengchun.json 

或者

 cat kumufengchun.json | jq .

输出如下:

[root@localhost ~]$ cat kumufengchun.json | jq .
{"name": "kumufengchun","age": "18","city": "beijing","email": "kumufengchun@gmail.com","date": "Thursday","country": "China","company": ["baidu","google","alibaba"]
}

是已经格式化的json数据串,在linux系统下还高光显示,key和value用不同的颜色表示,如下图:

2.输出某个字段或者某个索引的值

语法:jq  '.<key>'  ,这里key是字段名称

[root@localhost ~]$ jq .name kumufengchun.json
"kumufengchun"[root@localhost ~]$ jq '.name' kumufengchun.json
"kumufengchun"[root@localhost ~]$ jq '.company' kumufengchun.json
[
"baidu",
"google",
"alibaba"
]

3.输出数组的值

语法:jq '.[<value>]' ,这里value是数组的索引整数值

[root@localhost ~]$ jq '.company[1]' kumufengchun.json
"google"[root@localhost ~]$ jq '.company[2]' kumufengchun.json
"alibaba"

4.输出列表、数组的一部分,对其进行切片

语法:jq '.<list-key>[s:e]',返回的是数组或者列表的index从s开始(包括s)到e结束(不包括e)

[root@localhost ~]$ jq '.company[0:2]' kumufengchun.json
["baidu","google"
]

也可以省略开始的index,只有结束的index,如下,仍然是不包括结束index的值:

[root@localhost ~]$ jq '.company[:3]' kumufengchun.json
["baidu","google","alibaba"
]

也可以省略结束的index,只有开始的index,如下,输出到最后:

[root@localhost ~]$ jq '.company[1:]' kumufengchun.json
["google","alibaba"
]

开始的索引也可以是负数,表示从后边倒着数,从-1开始数:

[root@localhost ~]$ jq '.company[-2:]' kumufengchun.json
["google","alibaba"
]

5.循环输出所有的值,如数组嵌套

语法:jq '.[]'

[root@localhost ~]$ jq '.[]' test.json
{"name": "JSON","good": true
}
{"name": "XML","good": false
}[root@localhost ~]$ jq '.[]' kumufengchun.json
"kumufengchun"
"18"
"beijing"
"kumufengchun@gmail.com"
"Thursday"
"China"
["baidu","google","alibaba"
]

6.输出多个索引的值,可以用逗号分割

语法: jq '.key1,.key2'

[root@localhost ~]$ jq '.name,.age' kumufengchun.json
"kumufengchun"
"18"

[root@localhost ~]$ jq '.date,.company[]' kumufengchun.json
"Thursday"
"baidu"
"google"
"alibaba"

如果是数组,用中括号括起来要输出的键值,键值先写谁,先输出谁

[root@localhost ~]$ jq '.company[2,0]' kumufengchun.json
"alibaba"
"baidu"

7.用管道符号|可以对其进行再次处理

语法:jq .[] | .<key1>

[root@localhost ~]$ jq '.[]|.name' test.json
"JSON"
"XML"

8.括号的作用

[root@localhost ~]$ echo 1 | jq '(.+2)*5'
15

[root@localhost ~]$ echo {1,2,3} | jq '(.+2)*5'
15
20
25

9.length求长度,如果是字符串是求的字符串的长度,如果是数组则求得是数组的长度

[root@localhost ~]$ cat kumufengchun.json | jq '.[] | length'
12
2
7
22
8
5
3

10.输出所有的keys

语法: jq keys

[root@localhost ~]$ cat kumufengchun.json | jq 'keys'
["age","city","company","country","date","email","name"
]

输出数组的keys:

[root@localhost ~]$ cat kumufengchun.json | jq '.company | keys'
[0,1,2
]

11.判断存不存在某个键

[root@localhost ~]$ cat kumufengchun.json | jq 'has("email")'
true
[root@localhost ~]$ cat kumufengchun.json | jq 'has("address")'
false

更多用法参见文档 https://stedolan.github.io/jq/manual/#Invokingjq

转载于:https://www.cnblogs.com/kumufengchun/p/10799888.html

shell学习(12)- jq相关推荐

  1. shell 学习之for语句

    shell 学习之for语句 一.for语法 for 变量 in 列表:do     循环体 done 二.常见用法 1.for用来遍历目录 1 2 3 4 5 6 7 8 9 10 #!/bin/b ...

  2. shell学习-基础篇

    shell学习-基础篇 Linux? 挺好的! shell是基础- 最近利用闲暇时间在 http://c.biancheng.net/ 网站上学习了shell基础篇,整理成博客以加深理解 文章目录 L ...

  3. shell学习训练总结_7

    shell学习训练&&总结_7 统计班级学生各科成绩(shuxue,yuwen,yinyu)信息,并计算各科成绩的平均值和总和 正则案例分析 datafile操作要求: 针对shell ...

  4. Linux| |Shell学习

    Shell学习 # 符号 1. 初识 1.1 Shell定位 Shell就是用C编写的程序,是用户是用Linux的桥梁.Shell就是Linux内核的一个外壳,调用内核的接口 1.2 Shell和Ba ...

  5. shell学习笔记 (2)

    shell学习笔记 (2) ---china.pub.com  linux shell电子书学习笔记 第2章 使用find和xargs find pathname -options [-print - ...

  6. ThinkPhp学习12

    原文:ThinkPhp学习12 二.输出模板内容      (重点) a.display 1.display中没有参数    $this->display(); 2.可以带参数    $this ...

  7. 【转】shell学习笔记(一)——学习目的性、特殊字符、运算符等

    1 学习shell的目的性 写之前我们先来搞清楚为什么要学shell,学习要有目的性 shell简单.灵活.高效,特别适合处理一些系统管理方面的小问题 shell可以实现自动化管理,让系统管理员的工作 ...

  8. Shell学习之结合正则表达式与通配符的使用(五)

    Shell学习之结合正则表达式与通配符的使用 目录 通配符 正则表达式与通配符 通配符 通配符的使用 正则表达式 正则表达式 正则表达式的使用 通配符 正则表达式与通配符 正则表达式用来在文件中匹配符 ...

  9. Shell学习:关于替换命令-tr-ROT13法则

    Shell学习:关于替换命令-tr-ROT13法则     [root@stu100 ~]# echo abcdef|tr 'abcdef' 'xyzabc' xyzabc [root@stu100 ...

  10. linux学习软件有哪些,Linux学习12个有效果软件!看看哪些你用得上

    原标题:Linux学习12个有效果软件!看看哪些你用得上 不管是Linux入门学习还是已经在从事Linux开发工作的人,都需要学习和掌握一些Linux开发工具和软件,那么现在已经主流实用的Linux软 ...

最新文章

  1. linux 账户安全,在Linux上踢除某个用户和账户安全
  2. SQL Server-游标使用
  3. python自动化办公兼职-python如何实现自动化办公?
  4. Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
  5. DOS下导入导出MySQL备份
  6. C#读书笔记:线程,任务和同步
  7. matlab图片压缩
  8. wchar_t 的输出问题
  9. linux msgsend 头文件,Unix/Linux进程间通信
  10. VS2008环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题(IIS)...
  11. 利用partial关键字声明分部类和分部方法
  12. vscode调试时几个常用参数的含义和设置总结
  13. 反欺骗:从黑客时代的神话说起
  14. 小程序“成语猜题”部分答案,总共28667题
  15. php网站模板怎么改动,ECshop网站模板修改详细教程 and 模板对应的文件
  16. 网络舆情分析系统具体使用功能及作用详解
  17. 基于QT和DCMTK的Dicom 图像浏览器---目录
  18. Docker傻瓜式安装到使用
  19. tensorflow中的一些基本函数
  20. svg 画圆 画椭圆 画直线 画折线

热门文章

  1. 我去德国出差后学习的一些德语
  2. nodejs TCP server和TCP client如何进行数据交互
  3. 动手使用ABAP Channel开发一些小工具,提升日常工作效率 1
  4. 使用ABAP正则表达式解析HTML标签
  5. 使用Eclipse连接SAP云平台上的HANA数据库实例
  6. 如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity
  7. mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...
  8. python里os什么模块_python中os模块的主要方法
  9. 打印机打印网页不清晰_针式打印机不开机故障维修
  10. js截屏 video_用原生JS和html5进行视频截图并保存到本地