一、命令解析
jq
命令允许直接在命令行下对 JSON
进行操作,包括分片、过滤、转换等。有点类似于 Lambda
表达式的 Stream
流的操作。
二、命令安装
基于 CentOS7
的安装方式
-
通过
yum
安装# 安装EPEL源 yum install epel-release # 查看下jq包是否存在 yum list jq # 安装jq yum install jq
-
通过官网安装包安装
# 解压 tar.gz 包进入目录 # 编译安装 ./configure && make && make install
三、命令语法
-
语法格式
# jq + 可选参数 + 过滤条件 + 文件位置 jq [options] filter [files]
-
操作参数
**options:** --version:输出jq的版本信息并退出 --slurp/-s:读入整个输入流到一个数组。 --raw-input/-R:不作为JSON解析,将每一行的文本作为字符串输出到屏幕。 --null-input/ -n:不读取任何输入,过滤器运行使用null作为输入。一般用作从头构建JSON数据。 --compact-output /-c:使输出紧凑,而不是把每一个JSON对象输出在一行。 --colour-output / -C:打开颜色显示 --monochrome-output / -M:关闭颜色显示 --ascii-output /-a:指定输出格式为ASCII -raw-output /-r :如果过滤的结果是一个字符串,那么直接写到标准输出(去掉字符串的引号)
-
过滤参数
**filter:** . : 默认输出 .foo: 输出指定属性,foo代表属性。 .[foo] :输出指定数组元素。foo代表数组下标。 .[]:输出指定数组中全部元素 , :指定多个属性作为过滤条件时,用逗号分隔 | : 将指定的数组元素中的某个属性作为过滤条件 **files:** JOSN格式文件。
四、命令使用
-
测试
JSON
格式数据[{"hostCompany":"Beijing Autelan Technology","hostModel":"CS-VIC-2000-C","hostsn":"01010730b12014A00477","mac":"00:1F:64:CE:F3:8E","cpuModel":"MIPS 74Kc V4.12","cpuSN":"000000","memoryModel":"abcdefg","memorySN":"000000","boardSN":"01010730b12014A00477","networkCardMac":"00:1F:64:CE:F3:8F","lowFreModel":"AR9344","lowFreSN":"000000","hignFreModel":"AR9582","hignFreSN":"000000","gpsModel":"abcdefg","gpsSN":"000000","MEID_3g":"A000004E123ABD2","Company_3g":"ZTEMT INCORPORATED","modelOf3g":"MC271X","snOf3g":"A000004E123ABD2","iccid":"89860314400200885980","Operators":"CTCC","hardVersion":"1.20","firmwareVersion":"1.0.6.29"}]
-
格式化
JSON
内容.
-
通过
. + key
获取对应的值,如果JSON
串有层级,可以不断深入.[].hostCompany
-
多个输出对象一起过滤
.[].hostCompany, .[].hostModel
-
多个连接管道
.[] | .hostModel , .hostCompany