jq简介

jq可以对json数据进行分片、过滤、映射和转换,和sed、awk、grep等命令一样,都可以让你轻松地把玩文本。它能轻松地把你拥有的数据转换成你期望的格式,而且需要写的程序通常也比你期望的更加简短。

jq是用C编写,没有运行时依赖,所以几乎可以运行在任何系统上。预编译的二进制文件可以直接在Linux、OS X和windows系统上运行,当然在linux和OS X系统你需要赋与其可执行权限;

在linux系统中也可以直接用yum安装。

# 安装EPEL源:
yum install -y epel-release# 安装完EPEL源后,可以查看下jq包是否存在:
yum list jq安装jq:
yum install -y jq

下载页面:
https://stedolan.github.io/jq/download/

在知道jq命令之前,我在linux系统中极少直接去命令去处理json数据,除非只是简单地从中过滤某个字符串,那就用grep结合正则表达式来解决。所以,掌握了jq命令,则可以让linux命令和shell脚本在处理json数据时变得得心应手。

常用选项

-c 紧凑输出json数据
-e 根据输出结果设置命令退出状态码
-s 读取所有输入到一个数组
-r 输出原始字符串,而不是一个JSON格式
-C 高亮显示
-M 单色显示
-S 排序对象
--tab 使用tab缩进

jq例子

为了便于演示jq的功能,我们在文件json.txt中保存如下内容:

cat json.txt [{"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"}]}]

为了让你理解文件中的内容,对比jq的效果,在json解析工具中显示为:

"."

最简单的jq程序是表达式".",它不改变输入,但可以将其优美地输出,便于阅读和理解。

cat json.txt | 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"}]}
]

[index]

输出列表中的第一个元素,可以使用[index]:

cat json.txt | jq '.[0]'{"name": "站长工具","url": "http://tool.chinaz.com","address": {"city": "厦门","country": "中国"},"arrayBrowser": [{"name": "Google","url": "http://www.google.com"},{"name": "Baidu","url": "http://www.baidu.com"}]
}

管道线|

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

在{}中,冒号前面的名字是映射的名称,你可以任意修改,如:

cat json.txt | jq "[.[] | {name_001:.arrayBrowser[1].name,city_002:.address.city}]"[{"name_001": "Baidu","city_002": "厦门"},{"name_001": "bing","city_002": "大连"}
]

linux shell json解析命令 jq 简介相关推荐

  1. linux的json命令安装,linux 下强大的 JSON 解析命令 jq

    介绍 jq is like sed for JSON data - you can use it to slice and filter and map and transform structure ...

  2. linux 下强大的 JSON 解析命令 jq

    介绍 jq is like sedfor JSON data - you can use it to slice and filter and map and transform structured ...

  3. linux shell 用户切换命令 su 简介

    Linux 系统有不同类型的用户,用户有不同类型的权限. 并非所有用户都可以执行所有命令,也不是所有用户都可以切换到其他用户.我们今天要介绍的内容就是如何在命令行中切换到其他用户. 要切换用户,首先需 ...

  4. linux shell中的命令自动补全(compgen complete)与 命令行参数解析

    linux shell中的命令自动补全(compgen complete)与 命令行参数解析 标签: shell脚本 2013-12-31 21:56 6661人阅读 评论(6) 收藏 举报 分类: ...

  5. linux shell变量的,linux shell变量解析

    摘要 腾兴网为您分享:linux shell变量解析,智影,智联招聘,智慧消防,音恋等软件知识,以及考拉fm电台,快快游戏,京东企业购app,pdf加密工具,高德导航3d版,电脑驱动,兰溪新闻,我爱网 ...

  6. 【shell】Linux Shell远程执行命令

    目录 shell远程执行 前提条件: 对于简单的命令: 对于脚本的方式: SSH命令格式 主要参数说明 ssh控制远程主机,远程执行命令步骤 准备工作 基于公私钥认证远程登录可能存在的不足 ssh 执 ...

  7. 执行远程linux命令,linux shell 远程执行命令

    经常要部署多台服务器上面的应用,如果一个个机器的登录太麻烦. 所有就想到编写一个脚本来部署不同的服务器 前提条件: 配置ssh免登陆 如果不会的请参加我的另外一篇文章 http://blog.csdn ...

  8. linux shell sed awk 命令(2)-awk

    linux shell sed awk 命令(2)-awk awk语法格式: awk [选项] -f program-file [ -- ] file ... 选项: -F fs, --field-s ...

  9. linux远程执行shell命令行,linux shell 远程执行命令--ftp

    linux shell 远程执行命令--ftp 2018-12-07 ftp有很多命令,熟悉这些命令你能大大的提高工作效率: FTP命令行格式为: ftp -v -d -i -n -g [主机名] , ...

最新文章

  1. Nodejs教程14:querystring模块
  2. 我的设计模型之简单工厂
  3. Qt5.9使用QWebEngineView加载网页速度非常慢,问题解决
  4. 解决remove @override annotation
  5. css less 不要作用到子对象_CSS-预处理语言Sass、Less简述
  6. 大图幻灯粉红色bootstrap4引导页模板
  7. C语言学习系列(六)基本语法
  8. perlretut - Perl regular expressions tutorial ---- 中文版
  9. android系统一直显示通知栏_Android8以上 显示通知栏简单实现
  10. 使用DbFunctions来解决EF按照日期分组数据
  11. mysql的驱动connect放在哪里_十年测试解析:ddt结合excel,csv,mysql实现自动化测试数据驱动...
  12. 图解stylegan
  13. 【转】十大抢手的网站压力测试工具
  14. tableau如何生成HTML文件,Tableau 入门
  15. OrthoMCL Pipeline 安装
  16. java 音频 网络传输_如何流式传输音频?
  17. remove logo now注册码
  18. 【中亦安图】风险提醒之Oracle RAC高可用失效(2)
  19. 基于elementui的大文件断点续传
  20. html下拉框设置默认值_html下拉框怎么设置默认值

热门文章

  1. Linux 后台运行 springboot项目
  2. android屏幕常亮功能,Android保持屏幕常亮2种实现方法
  3. 3D MAX的车削命令(图)
  4. 新款 iPhone,比绿更绿
  5. html加了文档声明之后页面错乱,DOCTYPE 文档类型声明(网页爱好者必看)
  6. 对系统学习与写博客的看法——学完《第一行代码》有感
  7. 符号大全!!!!!!
  8. 新能源二手车和燃油二手车如何选择
  9. 吉利星瑞噪音分贝测试软件,吉利星瑞性能测试:确实是最好的自主A级车
  10. 如果生病了,你能做些什么?