shell编程学习之使用jq对json数据进行提取
shell编程学习之使用jq对json提取
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是字段名称
[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是数组的索引整数值
[root@localhost ~]$ jq '.company[1]' kumufengchun.json
"google"
[root@localhost ~]$ jq '.company[2]' kumufengchun.json
"alibaba"
4.输出列表、数组的一部分,对其进行切片
语法:jq '.[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 .[] | .
[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
12.更多用法
参见文档 https://stedolan.github.io/jq/manual/#Invokingjq
shell编程学习之使用jq对json数据进行提取的更多相关文章
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
- jq处理JSON数据, jq Manual (development version)
jq 允许你直接在命令行下对 JSON 进行操作,包括分片.过滤.转换等等.让我们通过几个例子来说明 jq 的功能:一.输出格式化,漂亮的打印效果如果我们用文本编辑器打开 JSON,有时候可能看起来会 ...
- Linux Shell编程学习笔记——目录(附笔记资源下载)
LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...
- shell编程学习笔记(一):编写我的第一段代码
目前在学习Shell编程,我会把我的学习笔记记录在这里.大神可以直接略过~ 嗯,第一段代码,肯定是要输出Hello World了~ 以下蓝色字体的内容为linux命令,红色字体的内容为输出的内容: # ...
- shell编程学习笔记之sed编辑器
在shell编程中,大多数处理的都是文本文件.对文本文件进行处理除了使用交互式文本编辑器(vi[m],gedit......)也可以使用另外一类:流编辑器. 流编辑器:使用预定义的编辑规则来对文本进行 ...
- shell编程学习1
1.shell是操作系统的终端命令行 (1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式. (2)我们可以使用shell和操作系统.uboot等软件系统进 ...
- shell编程学习笔记【原创】
本文为本人学习笔记,如有转载请注明出处,谢谢 一.Bourne Shell 有如下四种变量: 用户自定义变量 位置变量,即命令行参数 预定义变量 环境变量 二.位置变量 $ 与键入的命令行一样,包含脚 ...
- (七)shell编程学习
1.shell程序练习:创建一个dir文件夹,在dir文件夹里再创建一个cd.c文件 首先vim hello.sh 2.shell中的变量定义和引用 (1)变量定义和初始化.shell是弱类型语言(语 ...
- shell编程学习笔记(十):Shell中的for循环
shell编程中可以实现for循环遍历 先来写一个最简单的吧,循环输出从1到10,脚本内容为: #! /bin/sh for i in {1..10} do echo $i done 上面的代码从1到 ...
随机推荐
- 851. spfa求最短路
给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible. 数据保证不存在负权回路. 输入格式 ...
- html解析过程
Web页面运行在各种各样的浏览器当中,浏览器载入.渲染页面的速度直接影响着用户体验 简单地说,页面渲染就是浏览器将html代码根据CSS定义的规则显示在浏览器窗口中的这个过程.先来大致了解一下浏览器都 ...
- 会编程的 AI + 会修 Bug 的 AI,等于什么 ?
2017-02-25 Python开发者 (点击上方公众号,可快速关注) 关于人工智能未来的畅想,除了家庭服务机器人,快递无人机,医用机器人等等,Lucas Carlson 认为人工智能在另外一个领域 ...
- Visual Studio 2013编译Tesseract 3.04
文章目录 去年时候使用了VS2008编译了Tesseract 3.02版本,主要是参考了一份官方文档,但是对于目前的最新版本并没有给出说明. 本文主要参考了Paul Vorbach的How to bu ...
- selenium之浏览器、元素、鼠标等操作总结
1 控制浏览器 Selenium 主要提供的是操作页面上各种元素的方法,但它也提供了操作浏览器本身的方法,比如浏览器的大小以及浏览器后退.前进按钮等. 1.1 控制浏览器窗口大小 在不同的浏览 ...
- 2016/11/10 吃吃喝喝Hacking Thursday Night聚餐活动 at Dunkin Donuts
店名:Dunkin Donuts 唐恩都乐 点评:http://www.dianping.com/shop/21378231 地址:静安区南京西路1649号静安公园内(近静安公园) 走法:地铁2号线静 ...
- C++走向远洋——22(项目一,三角形,类)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:sanjiaoxing.cpp * 作者:常轩 * 微信公众号: ...
- golang 统计系统测试覆盖率
golang 统计系统测试覆盖率 参考资料 https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests https:/ ...
- USB小白学习之路(6) IIC EEPROM读取解析
IIC EEPROM读取解析 1. 编译错误处理(这里可以忽略) 在解压包解压了程序后,直接编译,出现如下错误. *** WARNING L14: INCOMPATIBLE MEMORY MODEL ...
- Magisk了解以及简单的模块制作
Magisk,就是刷机经常会需要使用的,也是就是我们说的面具或者脸谱.因为它的logo就是面具或者说脸谱.我们先简单了解一下: XDA上论坛的说明:Magisk - The Universal Sys ...