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数据进行提取的更多相关文章

  1. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

  2. jq处理JSON数据, jq Manual (development version)

    jq 允许你直接在命令行下对 JSON 进行操作,包括分片.过滤.转换等等.让我们通过几个例子来说明 jq 的功能:一.输出格式化,漂亮的打印效果如果我们用文本编辑器打开 JSON,有时候可能看起来会 ...

  3. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  4. shell编程学习笔记(一):编写我的第一段代码

    目前在学习Shell编程,我会把我的学习笔记记录在这里.大神可以直接略过~ 嗯,第一段代码,肯定是要输出Hello World了~ 以下蓝色字体的内容为linux命令,红色字体的内容为输出的内容: # ...

  5. shell编程学习笔记之sed编辑器

    在shell编程中,大多数处理的都是文本文件.对文本文件进行处理除了使用交互式文本编辑器(vi[m],gedit......)也可以使用另外一类:流编辑器. 流编辑器:使用预定义的编辑规则来对文本进行 ...

  6. shell编程学习1

    1.shell是操作系统的终端命令行 (1)shell可以理解为软件系统提供给用户操作的命令行界面,可以说它是人机交互的一种方式.    (2)我们可以使用shell和操作系统.uboot等软件系统进 ...

  7. shell编程学习笔记【原创】

    本文为本人学习笔记,如有转载请注明出处,谢谢 一.Bourne Shell 有如下四种变量: 用户自定义变量 位置变量,即命令行参数 预定义变量 环境变量 二.位置变量 $ 与键入的命令行一样,包含脚 ...

  8. (七)shell编程学习

    1.shell程序练习:创建一个dir文件夹,在dir文件夹里再创建一个cd.c文件 首先vim hello.sh 2.shell中的变量定义和引用 (1)变量定义和初始化.shell是弱类型语言(语 ...

  9. shell编程学习笔记(十):Shell中的for循环

    shell编程中可以实现for循环遍历 先来写一个最简单的吧,循环输出从1到10,脚本内容为: #! /bin/sh for i in {1..10} do echo $i done 上面的代码从1到 ...

随机推荐

  1. 扎心!来自互联网er的2019年度总结,看完笑着流泪……

    转眼2019年已经接近尾声,又到了年度总结的时候了.过去一年,你加了多少班,熬了多少夜,回想起来历历在目.互联网人2019年度总结,看完扎心了-- 01 - 这一年里 你一共提了275个需求 其中27 ...

  2. Jmeter连接mysql成功

    1 下载,mysql-connector-odbc-5.3.4-winx64.msi 进行安装  <转载> 2 安装后, copy "C:\ProgramFiles (x86)\ ...

  3. 如何正确的hook方法objc_msgSend · jmpews

    如何正确的hook方法objc_msgSend 前言 如果希望对 Objective-C 的方法调用进行 log, 一个很好的解决方法就是 hook 方法 objc_msgSend, 当然想到的就是利 ...

  4. php获取远程图片并把它保存到本地

    /* *功能:php多种方式完美实现下载远程图片保存到本地 *参数:文件url,保存文件名称,使用的下载方式 *当保存文件名称为空时则使用远程文件原来的名称 */ function getImage( ...

  5. 吐槽苹果开放接口のappleid登陆

    这里吐槽一下苹果的开发文档,一切源于前段时间,公司的产品app(某知名资讯app)要接入苹果登陆(ios13发布以来,apple就流氓要求新上线的app,如果有第三方登陆的话,必须要接入appleid ...

  6. 「前端」rem 缩放方案 flexible-js 兼容 375px 方案的思路

    本文来自尚妆前端团队南洋 发表于尚妆github博客,欢迎订阅. 移动端H5页面rem缩放方案flexible.js兼容375px方案的思路 参考: 移动端高清.多屏适配方案 viewport-and ...

  7. 前端每日实战:85# 视频演示如何用纯 CSS 创作一个小球反弹的动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OwWROO 可交互视频 此视频是可 ...

  8. js中的内置方法的兼容写法

    1.如果浏览器不支持every属性,every的实现原理 if(Array.prototype.every===undefined){ Array.prototype.every=function(f ...

  9. java并发编程基础概念

    本次内容主要讲进程和线程.CPU核心数和线程数.CPU时间片轮转机制.上下文切换,并行和并发的基本概念以及并发编程的好处和注意事项,为java并发编程打下扎实基础. 1.什么是进程和线程 1.1 进程 ...

  10. npm项目创建初始过程详解

    npm install 就是安装模块,npm run dev  就是执行npm script中的命令.当我们执行npm命令的时候,它到哪里去找,这就要说到每个node项目中都有的核心文件package ...