[linux命令] jq - JSON处理

jq可以对json数据进行分片、过滤、映射、转换,jq可以像sed、awk、grep等命令一样轻松的处理文本;jq使用c语言编写,没有运行时依赖,可以下载预编译的二进制文件复制到远程机器上运行;使用jq可轻松的将现有的数据格式转换为你想要的数据格式。

一、用户手册

  • mac下安装

brew install jq

二、使用示例

jq使用方法

jq [options] <jq filter> [file...]

其中,options为jq执行的参数,filter为过滤的符号,file为被执行对象(可同时执行多个对象),当不指定文件时,以命令行用户输入作为jq输入。

  • 2.1 jq执行参数(options)

参数 功能 范例
-c 将输出按压缩格式展示(默认情况下按JSON格式化展示) jq -c . test.txt
-C 将输出按带颜色的JSON格式化展示或到管道 jq -C . test.txt
-M 禁止输出按带颜色的JSON格式化展示或到管道 jq -M . test.txt
-S 按JSON字段的顺序输出 jq -S . test.txt

全部参数见用户操作手册

  • 2.2 jq过滤功能

“.” : 输出自己,搭配"[]“可处理数组元素,”[n1:n2]"指定输出数组的范围,也可根据JSON多层结果做级联处理。

MacBook-Pro-6:test jerry$ jq -c . test.txt
[{"name":"JSON","good":true},{"name":"XML","good":false}]
MacBook-Pro-6:test jerry$ jq .[] test.txt
{
  "name": "JSON",
  "good": true
}
{
  "name": "XML",
  "good": false
}
MacBook-Pro-6:test jerry$ jq .[1:2] test.txt
[
  {
    "name": "XML",
    "good": false
  }
]
MacBook-Pro-6:test jerry$ jq .[1] test.txt
{
  "name": "XML",
  "good": false
}
MacBook-Pro-6:test jerry$ jq .[1].name test.txt
"XML"
MacBook-Pro-6:test jerry$

“,” : 可对输入执行多个过滤条件并输出结果

MacBook-Pro-6:test jerry$ jq -c . test2.txt
{"user":"stedolan","projects":["jq","wikiflow"]}
MacBook-Pro-6:test jerry$ jq '.user, .projects[1]' test2.txt
"stedolan"
"wikiflow"

“|” : 管道可像Unix管道一样,将管道左侧的输出作为管道右侧的输入,当管道左侧有多个输出时,会按顺序依次执行管道右侧的命令

MacBook-Pro-6:test jerry$ jq -c '.' test.txt
[{"name":"JSON","good":true},{"name":"XML","good":false}]
MacBook-Pro-6:test jerry$ jq '.[] | .name' test.txt
"JSON"
"XML"

“()” : 组合操作符

MacBook-Pro-6:test jerry$ jq '(. + 3) * 2'
1
8
  • 2.3 类型和值

“[]” : 构建数组

MacBook-Pro-6:test jerry$ jq -c '.' test2.txt
{"user":"stedolan","projects":["jq","wikiflow"]}
MacBook-Pro-6:test jerry$ jq '[.user, .projects[1]]' test2.txt
[
  "stedolan",
  "wikiflow"
]

“{}” : 构建对象

MacBook-Pro-6:test jerry$ jq -c '.' test2.txt
{"user":"stedolan","projects":["jq","wikiflow"]}
MacBook-Pro-6:test jerry$ jq '{A : .user, B : .projects[]}' test2.txt
{
  "A": "stedolan",
  "B": "jq"
}
{
  "A": "stedolan",
  "B": "wikiflow"
}
  • 2.4 内建函数

“keys” : 应用于对象时,返回对象中的key组合,按字母顺序排列;应用于数组时,返回数组中对象的下标。

MacBook-Pro-6:test jerry$ jq -c '.' test.txt
[{"name":"JSON","good":true},{"name":"XML","good":false}]
MacBook-Pro-6:test jerry$ jq 'keys' test.txt
[
  0,
  1
]
MacBook-Pro-6:test jerry$ jq '.[1] | keys' test.txt
[
  "good",
  "name"
]

“has(key)” : 应用于对象时,返回对象是否有指定key;应用于数组时,返回是否有指定下标。

MacBook-Pro-6:test jerry$ jq -c '.' test.txt
[{"name":"JSON","good":true},{"name":"XML","good":false}]
MacBook-Pro-6:test jerry$ jq '.[1] | has("name")' test.txt
true
MacBook-Pro-6:test jerry$ jq 'has(12)' test.txt
false

“del(path_expression)” : 删除对象的指定key或数组的指定下标对象(不会对源文件进行删除)

MacBook-Pro-6:test jerry$ jq -c '.' test.txt
[{"name":"JSON","good":true},{"name":"XML","good":false}]
MacBook-Pro-6:test jerry$ jq 'del(.[].name)' test.txt
[
  {
    "good": true
  },
  {
    "good": false
  }
]
MacBook-Pro-6:test jerry$ jq 'del(.[1])' test.txt
[
  {
    "name": "JSON",
    "good": true
  }
]

更多内建函数见用户手册

  • 2.5 条件和比较

  • 2.6 正则表达式

(0)

相关推荐

  • 【竺】Postman实操3

    使用postman进行简单压力测试 目录 1.新建一个fodder,在fodder下添加要进行压力测试的接口: 2.post接口测试,参数从txt导入 3.设置 Pre-request-Script ...

  • 14年的二手macbook pro卖1500元,值不值得买?

    我首先回答下:MacBook Pro ( 2014年款) 1500元,这价格非常值得啊.愿意卖这价格估计是亲戚吧,要么就是目的不纯啊.要是机器运行正常,是真事,要是能当面验机交易也是不错的. 13英寸 ...

  • jmeter压测学习8-压测带token的接口

    前言 工作中我们需要压测的接口大部分都是需要先登陆后,带着token的接口(或者带着cookies),我们可以先登陆获取token再关联到下个接口. 比如我现在要压测一个修改用户的个人信息接口,每个用 ...

  • postman使用教程7-参数化引用外部文件(txt/csv/json)测试数据

    前言 当同一个接口需要测试不同的参数时,需用到参数化的概念.postman支持从外部文件读取测试数据参数化 设置参数化变量 新建一个collections 专门测试登录接口 设置集合变量usernam ...

  • 全新MacBook Pro在10月27日到来?只是邀请函不见踪影

    如果说苹果在今年未能让果粉和玩家满意的事情,那就是苹果还没有推出早就应该出的全新MacBook Pro笔记本电脑,而现在有靠谱的国外媒体确认全新MacBook Pro将在本月27日到来. 外媒Reco ...

  • 14英寸MacBook Pro并非没有,只是又被传明年才到来

    苹果在默默更新了2020款的13英寸MacBook Pro,作为又一款refresh更,不能评价其不好,只是相比大家预期能有着16英寸MacBook Pro那样大的改动幅度,这次新款13英寸实在显得太 ...

  • Linux命令route显示或管理路由表-linux运维学习

    route命令可以显示或管理Linux系统的路由表,route命令设置的路由主要是静态路由.掌握Linux命令对于Linux运维来说是必备技能,对于Linux运维工作起着重要的作用.那么route命令 ...

  • 程序运行时调整优先级用什么命令?Linux命令

    Linux运维管理工作中,有程序在运行时,如果需要调整优先级,会用到什么命令?Linux命令众多运维工作中经常会用到的,是Linux运维必备技能知识点.那么对于初学Linux运维的人来说,牢记Linu ...

  • Linux命令中交互式命令都有哪些?Linux基础

    交互式命令就是在top命令执行过程中使用的一些命令.top命令用于实时地对系统处理器状态进行监控,它能够实时地显示系统中各个进程的资源占用状况.该命令可以按照CPU的使用.内存的使用和执行时间对系统任 ...

  • 这些最常用的Linux命令,每一条都应该会,没有借口!

    linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心. 线上查询及帮助 ...

  • ss命令查看网络状态参数选项有哪些?Linux命令

    ss命令是类似并将取代netstat的工具,它能用来查看网络状态信息,包括TCP.UDP连接.端口等.netstat命令用于显示本机网络的连接状态.运行端口和路由表等信息.而ss命令优点是能够显示更多 ...

  • 测试主机网络连通性ping命令参数选项 Linux命令

    ping命令可用于测试主机之间网络的连通性.执行ping命令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而可得知该主机运作正常.那么Linux运维常用命 ...

  • wget命令优势及参数选项有什么?Linux命令

    wget命令用于从网络上下载某些资料,该命令对于能够连接到互联网的Linux系统的作用非常大,可以直接从网络上下载自己所需要的文件.命令行下载工具wget是Linux运维管理人员常用的核心命令之一.那 ...

  • 监听网络流量命令tcpdump学习知识?Linux命令

    tcpdump命令是一个截获网络数据包的包分析工具.tcpdump可以将网络中传送的数据包的"头"完全截获下来以提供分析.它支持针对网络层.协议.主机.端口等的过滤,并支持与.或. ...

  • 对于Linux系统管理命令方面都有哪些?linux命令

    Linux运维人员常用的Linux命令有很多,作为运维人员这些常用命令是必备知识.掌握Linux运维常用命令,工作上会事半功倍,提供Linux运维工作效率.那么对于Linux系统管理命令方面都有哪些? ...