linux shell json解析命令 jq 简介

jq简介

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

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

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

1# 安装EPEL源: 2yum install -y epel-release 3 4# 安装完EPEL源后,可以查看下jq包是否存在: 5yum list jq 6 7安装jq: 8yum install -y jq

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

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

jq例子

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

1cat json.txt 2 3[{"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"}]}] 4 5

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

"."

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

1cat json.txt | jq '.' 2 3[ 4 { 5 "name": "站长工具", 6 "url": "http://tool.chinaz.com", 7 "address": { 8 "city": "厦门", 9 "country": "中国" 10 }, 11 "arrayBrowser": [ 12 { 13 "name": "Google", 14 "url": "http://www.google.com" 15 }, 16 { 17 "name": "Baidu", 18 "url": "http://www.baidu.com" 19 } 20 ] 21 }, 22 { 23 "name": "站长之家", 24 "url": "http://tool.zzhome.com", 25 "address": { 26 "city": "大连", 27 "country": "中国" 28 }, 29 "arrayBrowser": [ 30 { 31 "name": "360", 32 "url": "http://www.so.com" 33 }, 34 { 35 "name": "bing", 36 "url": "http://www.bing.com" 37 } 38 ] 39 } 40] 41 42

[index]

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

1cat json.txt | jq '.[0]' 2 3{ 4 "name": "站长工具", 5 "url": "http://tool.chinaz.com", 6 "address": { 7 "city": "厦门", 8 "country": "中国" 9 }, 10 "arrayBrowser": [ 11 { 12 "name": "Google", 13 "url": "http://www.google.com" 14 }, 15 { 16 "name": "Baidu", 17 "url": "http://www.baidu.com" 18 } 19 ] 20} 21 22

管道线|

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

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

1cat json.txt | jq '.[0] | {name:.name,city:.address.city}' 2 3{ 4 "name": "站长工具", 5 "city": "厦门" 6} 7 8 9cat json.txt | jq '.[0] | {name:.arrayBrowser[1].name,city:.address.city}' 10 11{ 12 "name": "Baidu", 13 "city": "厦门" 14} 15 16 17cat json.txt | jq ".[] | {name:.arrayBrowser[1].name,city:.address.city}" 18 19{ 20 "name": "Baidu", 21 "city": "厦门" 22} 23{ 24 "name": "bing", 25 "city": "大连" 26} 27

[]

如果希望把jq的输出当作一个数组,可以在前后加上[]

1cat json.txt | jq "[.[] | {name:.arrayBrowser[1].name,city:.address.city}]" 2 3[ 4 { 5 "name": "Baidu", 6 "city": "厦门" 7 }, 8 { 9 "name": "bing", 10 "city": "大连" 11 } 12] 13 14

自定义key

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

1cat json.txt | jq "[.[] | {name_001:.arrayBrowser[1].name,city_002:.address.city}]" 2 3[ 4 { 5 "name_001": "Baidu", 6 "city_002": "厦门" 7 }, 8 { 9 "name_001": "bing", 10 "city_002": "大连" 11 } 12] 13

本文转自 https://blog.csdn.net/whatday/article/details/105781873,如有侵权,请联系删除。

点赞
收藏

评论区

加载中...

相关推荐

Vue2全家桶之一:vue-cli(vue脚手架)超详细教程

这是我第4篇简书。  都说Vue2简单上手容易,的确,看了官方文档确实觉得上手很快,除了ES6语法和webpack的配置让你感到陌生,重要的是思路的变换,以前用jq随便拿全局变量和修改dom的锤子不能用了,vue只用关心数据本身,不用再频繁繁琐的操作dom,注册事件、监听事件、取消事件。。。。(确实很烦)。vue的官方文档还是不错的,由浅到深,如果不使用

Linux 三剑客之 grep 使用详解

Linux最重要的三个命令在业界被称为三剑客,它们是:awk、sed、grep。sed已经在上篇(https://mp.weixin.qq.com/s/XvTrfKfYZHnGZQ1O1K9lg)中讲过,本文要讲的是grep命令。我们在使用Linux系统中,grep命令的使用尤为频繁,熟练掌握grep的常见用法,能够极大地提高你的

Python 编程开发 实用经验和技巧

小编目前在做毕业设计,主题为“高考志愿信息交流平台”,面向高中生和大学生,辛苦各位读者大佬朋友们填下问卷,点击链接https://www.wjx.cn/jq/98944127.aspx(https://www.wjx.cn/jq/98944127.aspx)或扫描二维码、微信小程序码均可,希望各位能提供一些调查数据,先在这里谢过各位了(\\^_\^)

JQuery

一、jq简介jq其实就是js的一个文件。二、jq书写步骤1、先引入jq文件(min的文件)<scripttype"text/javascript"src"file:///C|/jquery/jquery3.3.1.min.js"</script2、换新的一行写js代码<scripttype"text/javascri

Go的json解析:Marshal与Unmarshal

简介Json(JavascriptObjectNanotation)是一种数据交换格式,常用于前后端数据传输。任意一端将数据转换成json字符串,另一端再将该字符串解析成相应的数据结构,如string类型,strcut对象等。go语言本身为我们提供了json的工具包”encoding/json”。更多的使用方式,可以参考:https:

JQ的简单使用(基础)——————JQ

JQ基础——JQ的简单使用<!DOCTYPEhtml<html<head<metacharset"utf8"/<title</title<style.w{}</style</head