shell学习(12)- jq
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相关推荐
- shell 学习之for语句
shell 学习之for语句 一.for语法 for 变量 in 列表:do 循环体 done 二.常见用法 1.for用来遍历目录 1 2 3 4 5 6 7 8 9 10 #!/bin/b ...
- shell学习-基础篇
shell学习-基础篇 Linux? 挺好的! shell是基础- 最近利用闲暇时间在 http://c.biancheng.net/ 网站上学习了shell基础篇,整理成博客以加深理解 文章目录 L ...
- shell学习训练总结_7
shell学习训练&&总结_7 统计班级学生各科成绩(shuxue,yuwen,yinyu)信息,并计算各科成绩的平均值和总和 正则案例分析 datafile操作要求: 针对shell ...
- Linux| |Shell学习
Shell学习 # 符号 1. 初识 1.1 Shell定位 Shell就是用C编写的程序,是用户是用Linux的桥梁.Shell就是Linux内核的一个外壳,调用内核的接口 1.2 Shell和Ba ...
- shell学习笔记 (2)
shell学习笔记 (2) ---china.pub.com linux shell电子书学习笔记 第2章 使用find和xargs find pathname -options [-print - ...
- ThinkPhp学习12
原文:ThinkPhp学习12 二.输出模板内容 (重点) a.display 1.display中没有参数 $this->display(); 2.可以带参数 $this ...
- 【转】shell学习笔记(一)——学习目的性、特殊字符、运算符等
1 学习shell的目的性 写之前我们先来搞清楚为什么要学shell,学习要有目的性 shell简单.灵活.高效,特别适合处理一些系统管理方面的小问题 shell可以实现自动化管理,让系统管理员的工作 ...
- Shell学习之结合正则表达式与通配符的使用(五)
Shell学习之结合正则表达式与通配符的使用 目录 通配符 正则表达式与通配符 通配符 通配符的使用 正则表达式 正则表达式 正则表达式的使用 通配符 正则表达式与通配符 正则表达式用来在文件中匹配符 ...
- Shell学习:关于替换命令-tr-ROT13法则
Shell学习:关于替换命令-tr-ROT13法则 [root@stu100 ~]# echo abcdef|tr 'abcdef' 'xyzabc' xyzabc [root@stu100 ...
- linux学习软件有哪些,Linux学习12个有效果软件!看看哪些你用得上
原标题:Linux学习12个有效果软件!看看哪些你用得上 不管是Linux入门学习还是已经在从事Linux开发工作的人,都需要学习和掌握一些Linux开发工具和软件,那么现在已经主流实用的Linux软 ...
最新文章
- linux 账户安全,在Linux上踢除某个用户和账户安全
- SQL Server-游标使用
- python自动化办公兼职-python如何实现自动化办公?
- Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
- DOS下导入导出MySQL备份
- C#读书笔记:线程,任务和同步
- matlab图片压缩
- wchar_t 的输出问题
- linux msgsend 头文件,Unix/Linux进程间通信
- VS2008环境下开发的某些程序在其他机器运行提示“由于应用程序配置不正确,应用程序未能启动”的问题(IIS)...
- 利用partial关键字声明分部类和分部方法
- vscode调试时几个常用参数的含义和设置总结
- 反欺骗:从黑客时代的神话说起
- 小程序“成语猜题”部分答案,总共28667题
- php网站模板怎么改动,ECshop网站模板修改详细教程 and 模板对应的文件
- 网络舆情分析系统具体使用功能及作用详解
- 基于QT和DCMTK的Dicom 图像浏览器---目录
- Docker傻瓜式安装到使用
- tensorflow中的一些基本函数
- svg 画圆 画椭圆 画直线 画折线
热门文章
- 我去德国出差后学习的一些德语
- nodejs TCP server和TCP client如何进行数据交互
- 动手使用ABAP Channel开发一些小工具,提升日常工作效率 1
- 使用ABAP正则表达式解析HTML标签
- 使用Eclipse连接SAP云平台上的HANA数据库实例
- 如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity
- mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...
- python里os什么模块_python中os模块的主要方法
- 打印机打印网页不清晰_针式打印机不开机故障维修
- js截屏 video_用原生JS和html5进行视频截图并保存到本地