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":"","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": "",
"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"
""
"beijing"
"kumufengchun@gmail.com"
"Thursday"
"China"
[
"baidu",
"google",
"alibaba"
]
6.输出多个索引的值,可以用逗号分割
语法: jq '.key1,.key2'
[root@localhost ~]$ jq '.name,.age' kumufengchun.json
"kumufengchun"
""
[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 | jq '(.+2)*5'
[root@localhost ~]$ echo {,,} | jq '(.+2)*5'
9.length求长度,如果是字符串是求的字符串的长度,如果是数组则求得是数组的长度
[root@localhost ~]$ cat kumufengchun.json | jq '.[] | length'
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'
[
,
, ]
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
shell学习(12)- jq的更多相关文章
- shell学习笔记
shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...
- Shell学习之Shell特性(一)
Shell学习之Shell特性 目录 命令和文件自动补齐功能 命令历史记忆功能 history.上下键.!number.!string.!$.!! 别名功能 alias.unalias cp.~use ...
- [转帖][Bash Shell] Shell学习笔记
[Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html 阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...
- shell学习笔记汇总
1.shell脚本中函数使用 函数定义在前,调用在后,顺序反了就没有效果了.函数调用为:函数名 参数列表 函数内部通过以下变量访问函数的参数:shell脚本函数中: $0: 这个脚本的名字 $n: 这 ...
- (转)Shell学习之Shift的用法
Shell学习之Shift的用法 原文:https://www.cnblogs.com/sunfie/p/5943753.html 位置参数可以用shift命令左移.比如shift 3表示原来的$4现 ...
- Shell 学习—AWK介绍
Shell 学习—AWK = = = 安装awk root@kiki-desktop:~/shell# apt-get install gawk gawk-doc = = = awk 是一种程序语言. ...
- Shell学习(七)——sort、uniq、cut、wc命令详解
Shell学习(七)--sort.uniq.cut.wc命令详解 转自:[1]linux sort,uniq,cut,wc命令详解 https://www.cnblogs.com/ggjucheng/ ...
- JavaScript学习12 JS中定义对象的几种方式
JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...
- shell学习总结之自定义函数
shell学习总结之自定义函数 Myfun (){ echo -n "now i is $i " ! [ "$i" ] && exit ; ec ...
- SHELL学习笔记----IF条件判断,判断条件
SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外. if list then do something here ...
随机推荐
- windows异常演示,指定异常类型,然后生成异常
#include "stdafx.h"#include <Windows.h>#include <float.h> DWORD Filter (LPEXCE ...
- IntelliJ IDEA 导入Project
一.方式一 File---->Close Project 这样的户每次需要import,都要close一次,非常不方便,如果能在File下面岂不是更好? 二.方式二 File---->Se ...
- 一些API的用法
//1.init初始化 NSString * str1 = [[NSString alloc] init]; NSLog(@"str1 = %@",str1); //2.initW ...
- checked多选,取消,反选
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js刷新当前页面的几种方法
如何实现刷新当前页面呢?借助js你将无所不能. 1,reload 方法,该方法强迫浏览器刷新当前页面.语法:location.reload([bForceGet]) 参数: bForceGet, ...
- HDU 4899 Hero meet devil (状压DP, DP预处理)
题意:给你一个基因序列s(只有A,T,C,G四个字符,假设长度为n),问长度为m的基因序列s1中与给定的基因序列LCS是0,1......n的有多少个? 思路:最直接的方法是暴力枚举长度为m的串,然后 ...
- POJ 3714 分治/求平面最近点对
第一次见这种问题直接懵圈...没想到分治法这么强大,借鉴了lyd的代码: 代码如下 #include<cstdio> #include<algorithm> #include& ...
- URL操作
ThinkPHP 的 URL 操作.主要涉及到 URL 路径大小写.伪静态.生成以及模版中的 U()方法. 一.URL大小写 系统默认的规范是根据 URL 里面的模块名.控制器名来定位到具体的控制器类 ...
- php中用大括号把?>和<?php框起来的作用
<?php function my_function() { ?> My function was called <!--就是这里,为什么前面要用?>和< ?php 把M ...
- koa2 原生链接mysql
1.安装mysql $ npm install mysql 2.代码示例: const mysql = require("mysql"); // mysql.Promise = g ...