安装:

yum install jq -y

文档:

https://stedolan.github.io/jq/manual/

更多:

https://blog.csdn.net/Cheat1173010256/article/details/118230562

数据源

333.json

[{
"name": "站长工具",
"url": "http://tool.chinaz.com",
"address": {
"city": "厦门",
"country": "中国"
},
"arrayBrowser": [{
"name": "Google",
"url": "http://www.google.com"
},
{
"name": "Baidu",
"url": "http://www.baidu.com"
}
]
},
{
"name": "站长之家",
"url": "http://tool.zzhome.com",
"address": {
"city": "大连",
"country": "中国"
},
"arrayBrowser": [{
"name": "360",
"url": "http://www.so.com"
},
{
"name": "bing",
"url": "http://www.bing.com"
}
],
"127.0.0.1": {
"error": 200,
"msg": "ok"
}
}
]

例子基础

haima@haima-PC:~/Desktop$ cat 333.json |jq '.'
[
{
"name": "站长工具",
"url": "http://tool.chinaz.com",
"address": {
"city": "厦门",
"country": "中国"
},
"arrayBrowser": [
{
"name": "Google",
"url": "http://www.google.com"
},
{
"name": "Baidu",
"url": "http://www.baidu.com"
}
]
},
{
"name": "站长之家",
"url": "http://tool.zzhome.com",
"address": {
"city": "大连",
"country": "中国"
},
"arrayBrowser": [
{
"name": "360",
"url": "http://www.so.com"
},
{
"name": "bing",
"url": "http://www.bing.com"
}
],
"127.0.0.1": {
"error": 200,
"msg": "ok"
}
}
]

管道线 |

jq支持管道线 |,它如同linux命令中的管道线——把前面命令的输出当作是后面命令的输入。如下命令把.[0]作为{…}的输入,进而访问嵌套的属性,如.name和.address.city。

观察如下几个命令,通过改变|前后的输入和输出来达到不同的效果:

cat json.txt | jq '.[0] | {name:.name,city:.address.city}'

{
"name": "站长工具",
"city": "厦门"
} cat json.txt | jq '.[0] | {name:.arrayBrowser[1].name,city:.address.city}' {
"name": "Baidu",
"city": "厦门"
} cat json.txt | jq ".[] | {name:.arrayBrowser[1].name,city:.address.city}" {
"name": "Baidu",
"city": "厦门"
}
{
"name": "bing",
"city": "大连"
} []
如果希望把jq的输出当作一个数组,可以在前后加上[]: cat json.txt | jq "[.[] | {name:.arrayBrowser[1].name,city:.address.city}]"
[
{
"name": "Baidu",
"city": "厦门"
},
{
"name": "bing",
"city": "大连"
}
] 自定义key
在{}中,冒号前面的名字是映射的名称,你可以任意修改,如: ```sh
cat json.txt | jq "[.[] | {name_001:.arrayBrowser[1].name,city_002:.address.city}]" [
{
"name_001": "Baidu",
"city_002": "厦门"
},
{
"name_001": "bing",
"city_002": "大连"
}
]

原文链接:https://blog.csdn.net/qq_26502245/article/details/100191694

取0号单元下的元素

haima@haima-PC:~/Desktop$ cat 333.json |jq '.[0].name'
"站长工具"
haima@haima-PC:~/Desktop$ cat 333.json |jq '.[0].address'
{
"city": "厦门",
"country": "中国"
}
haima@haima-PC:~/Desktop$ cat 333.json |jq '.[0].address.city'
"厦门"
haima@haima-PC:~/Desktop$ cat 333.json |jq '.[0].address["city"]'
"厦门"
haima@haima-PC:~/Desktop$ cat 333.json |jq ".[0].address[\"city\"]"
"厦门"
haima@haima-PC:~/Desktop$ cat 333.json |jq '.[1]["127.0.0.1"]'
{
"error": 200,
"msg": "ok"
}
haima@haima-PC:~/Desktop$ cat 333.json | jq ".[0]" | jq 'keys' #获取0号单元的所有key
[
"address",
"arrayBrowser",
"name",
"url"
]
haima@haima-PC:~/Desktop$ cat 333.json | jq ".[0].address" # 获取0号单元的address
{
"city": "厦门",
"country": "中国"
}
haima@haima-PC:~/Desktop$ cat 333.json | jq ".[0].address" | jq 'keys' #获取0号单元的address里的所有 key(嵌套提取)
[
"city",
"country"
]
haima@haima-PC:~/Desktop$ cat 333.json | jq ".[0]" | jq 'has("name")' #判断是否有某个 key
true
haima@haima-PC:~/Desktop$ cat 333.json | jq ".[0]" | jq 'has("test")' #判断是否有某个 key
false

压缩json

haima@haima-PC:~/Desktop$ cat 333.json | jq -c .
[{"name":"站长工具","url":"http://tool.chinaz.com","address":{"city":"厦门","country":"中国"},"arrayBrowser":[{"name":"Google","url":"http://www.google.com"},{"name":"Baidu","url":"http://www.baidu.com"}]},{"name":"站长之家","url":"http://tool.zzhome.com","address":{"city":"大连","country":"中国"},"arrayBrowser":[{"name":"360","url":"http://www.so.com"},{"name":"bing","url":"http://www.bing.com"}],"127.0.0.1":{"error":200,"msg":"ok"}}]

例子二:

数据源 22.json

{"ip":"34.120.75.75"}
{"ip":"35.193.30.131"}
{"ip":"35.227.228.135"}
{"ip":"130.211.21.179"}
{"ip":"35.192.215.111"}
{"ip":"35.214.27.221"}
{"ip":"34.120.136.4"}
{"ip":"35.209.185.188"}
{"ip":"34.121.213.115"}
{"ip":"34.98.116.47"}

取出ip

$ cat 22.json |jq '.ip'
"34.120.75.75"
"35.193.30.131"
"35.227.228.135"
"130.211.21.179"
"35.192.215.111"
"35.214.27.221"
"34.120.136.4"
"35.209.185.188"
"34.121.213.115"
"34.98.116.47"

取出ip并去除双引号 (需要安装jq)

$ cat 22.json |jq '.ip' | sed 's/\"//g'
34.120.75.75
35.193.30.131
35.227.228.135
130.211.21.179
35.192.215.111
35.214.27.221
34.120.136.4
35.209.185.188
34.121.213.115
34.98.116.47

排序去重后,取出ip并去除双引号 (需要安装jq)

$  cat 22.json |sort | uniq  | sort -n | jq '.ip' | sed 's/\"//g'
34.120.241.13
34.125.140.101
34.126.67.33
34.65.22.11
34.77.137.149
34.85.82.186
34.86.160.16
34.90.193.87
34.92.44.105
34.93.161.137
34.94.248.178

解析:

s 为替换

以g结尾表示的是:全局性,意即”替代文本取代正则表达式中每一个匹配的”

直接改变的话用i:

sed i 's/\"//g'  11.txt

另外输出的话:

sed 's/\"//g'  aa.txt > 11.clean.txt

例子:

取出port和value ,组装json格式

{"took":648,"timed_out":false,"_shards":{"total":50,"successful":50,"skipped":0,"failed":0},"hits":{"total":9893731,"max_score":1.0,"hits":[{"_index":"fofapro_service","_type":"order","_id":"1.169.157.54:80","_score":1.0,"_source":{"port":80}}]},"aggregations":{"distinct_ips":{"value":9883243}}}
{"took":648,"timed_out":false,"_shards":{"total":50,"successful":50,"skipped":0,"failed":0},"hits":{"total":9893731,"max_score":1.0,"hits":[{"_index":"fofapro_service","_type":"order","_id":"1.169.157.54:80","_score":1.0,"_source":{"port":81}}]},"aggregations":{"distinct_ips":{"value":9883243}}}

命令:

$ cat es_port.json | jq '{port:.hits.hits[0]._source.port , count:.aggregations.distinct_ips.value}' -c | awk -F'port":' '{print $2}' | awk -F',"count":' '{print "{\"" $1"\":\""$2}' | sed 's/}/"}/g'
{"80":"9883243"}
{"81":"9883243"}

-c :一行显示

4 JSON parse array

   cat json_raw.txt | jq '.employees[1].name'
"Laura"

5 内建函数

jq还有一些内建函数如 key,has

key是用来获取JSON中的key元素的:

cat json_raw.txt | jq 'keys'
[
"employees",
"location",
"name"
]

has是用来是判断是否存在某个key:

cat json_raw.txt | jq 'has("name")'
true cat json_raw.txt | jq 'has("noexisted")'
false

linux 下jq的使用的更多相关文章

  1. Linux下安装Tomcat服务器和部署Web应用

    一.上传Tomcat服务器

  2. 转】Linux下安装Tomcat服务器和部署Web应用

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4097608.html 感谢! 一.上传Tomcat服务器

  3. Linux下多任务间通信和同步-信号

    Linux下多任务间通信和同步-信号 嵌入式开发交流群280352802,欢迎加入! 1.概述 信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式.信号可以直接进行用户空间进程和内核进程之间的 ...

  4. linux下安装tomcat和部署web应用

      孤傲苍狼 只为成功找方法,不为失败找借口! Linux下安装Tomcat服务器和部署Web应用 一.上传Tomcat服务器

  5. Linux下处理JSON的命令行工具:jq---安装

    转自:https://blog.csdn.net/Sunny_much/article/details/50668871      JSON是前端编程经常用到的格式.Linux下也有处理处理JSON的 ...

  6. linux下的命令和常见问题笔记

    nginx的三大功能: 1.http服务 2.反向代理 3.负载均衡 2.当nginx重启报:[root@localhost logs]# service nginx reloadReloading ...

  7. Linux下配置静态IP地址,设置DNS和主机名

    本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...

  8. Linux下安装Tomcat服务器

    Linux下安装Tomcat服务器 一.总结 一句话总结: linux多用才能熟 1.阿里云上面我们买的服务器,怎么让它可以访问特定的端口? 就是给服务器的安全组添加规则:实例-->更多--&g ...

  9. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  10. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

随机推荐

  1. kingbase ES group by 语句优化

    1.group by 分组语句 在SQL中group by主要用来进行分组统计,分组字段放在group by的后面:分组结果一般需要借助聚合函数实现. group by语法结构 1.常用语法 语法结构 ...

  2. Atcoder DP contest 题解

    动态规划(Atcoder DP 26题) on Atcoder on Luogu 本文同步发表于知乎专栏. Frog 1 $N$ 个石头,编号为 $1,2,...,N$.对于每个 $i(1 \leq ...

  3. IDEA怎么添加类注释和方法注释模板

    IDEA设置自动生成模板类和方法注释 一.模板类注释 在右侧粘贴如下代码: /** *@BelongsProject: ${PROJECT_NAME} *@BelongsPackage: ${PACK ...

  4. 北京思特奇2023年校招笔试(Java)

    北京思特奇2023年校招笔试(Java) 1.表达式 (short)10/10.2*2 运算后结果是什么类型? 答案:double,浮点数默认是double,自动类型向上转换为浮点数类型 2. ser ...

  5. #期望,树的直径#51nod 1803 森林直径

    题目 有一棵 \(n\) 个结点的树,按顺序给出树边 \((fa[i],i)\), \(Q\) 次询问查询如果只选取第 \([l,r]\) 条树边,问森林的直径 \(fa[i]\) 的生成方式为 \( ...

  6. #斜率优化,二分#CF631E Product Sum

    题目 有一个数列 \(a\),其权值为 \(\sum_{i=1}^ni*a_i\), 现在可以任意选择其中一个数字扔到任意位置,使权值和最大. \(n\leq 2*10^5,|a_i|\leq 10^ ...

  7. #线段树、构造#A 或位运算

    题目 一个长度为\(n\)的非负整数序列, 需要满足\(m\)个区间或值为阈值的限制条件 现在要构造一个这样的序列,不存在输出No 分析 线段树支持区间与,但查询区间或,下传标记,那就很好做了 代码 ...

  8. OpenHarmony持久化存储UI状态:PersistentStorage

      前两个小节介绍的LocalStorage和AppStorage都是运行时的内存,但是在应用退出再次启动后,依然能保存选定的结果,是应用开发中十分常见的现象,这就需要用到PersistentStor ...

  9. 【直播回顾】OpenHarmony知识赋能第五期第一课——精益开源

    4月26日晚上19点,知识赋能第五期第一节课<精益开源--理解设计思维.精益创业.敏捷开发是如何应用到开源项目中>,在OpenHarmony开发者成长计划社群内成功举行. 本期课程,由开源 ...

  10. 玩转OpenHarmony PID:教你打造两轮平衡车

    简介 此次为大家带来的是OpenAtom OpenHarmony(以下简称"OpenHarmony")系统与PID控制算法相结合并落地的平衡车项目. PID控制算法是一种经典的,并 ...