jq命令允许直接在命令行下对JSON进行操作,包括分片、过滤、转换等
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集
JSON 数据的书写格式是: 名称/对象。
JSON的结构基于两点
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格式文件。
示例1:
[root@vm_vgh-bj_zywccyr_0-164 test]# cat hostid
{"jsonrpc":"2.0","result":[{"hostid":"11241","proxy_hostid":"0","host":"VM_wuche_ZYWCCYR_10-12-2-70","status":"0","disable_until":"0","error":"","available":"1","errors_from":"0","lastaccess":"0","ipmi_authtype":"-1","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":"0","maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","jmx_disable_until":"0","jmx_available":"0","jmx_errors_from":"0","jmx_error":"","name":"VM_wuche_ZYWCCYR_10-12-2-70","flags":"0","templateid":"0","description":"","tls_connect":"1","tls_accept":"1","tls_issuer":"","tls_subject":"","tls_psk_identity":"","tls_psk":""},{"adc":"abc"}],"id":0}
[root@vm_vgh-bj_zywccyr_0-164 test]# cat hostid | jq -r .result[0]
{
"hostid": "11241",
"proxy_hostid": "0",
"host": "VM_wuche_ZYWCCYR_10-12-2-70",
"status": "0",
"disable_until": "0",
"error": "",
"available": "1",
"errors_from": "0",
"lastaccess": "0",
"ipmi_authtype": "-1",
"ipmi_privilege": "2",
"ipmi_username": "",
"ipmi_password": "",
"ipmi_disable_until": "0",
"ipmi_available": "0",
"snmp_disable_until": "0",
"snmp_available": "0",
"maintenanceid": "0",
"maintenance_status": "0",
"maintenance_type": "0",
"maintenance_from": "0",
"ipmi_errors_from": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"snmp_error": "",
"jmx_disable_until": "0",
"jmx_available": "0",
"jmx_errors_from": "0",
"jmx_error": "",
"name": "VM_wuche_ZYWCCYR_10-12-2-70",
"flags": "0",
"templateid": "0",
"description": "",
"tls_connect": "1",
"tls_accept": "1",
"tls_issuer": "",
"tls_subject": "",
"tls_psk_identity": "",
"tls_psk": ""
}
[root@vm_vgh-bj_zywccyr_0-164 test]# cat hostid | jq -r .result[0].hostid
11241
示例2:
[{"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"}]
$ jq . apinfo.json
[
{
"firmwareVersion": "1.0.6.29",
"hardVersion": "1.20",
"Operators": "CTCC",
"iccid": "DATA DATA",
"snOf3g": "A000004E123ABD2",
"modelOf3g": "MC271X",
"Company_3g": "ZTEMT INCORPORATED",
"MEID_3g": "A000004E123ABD2",
"memorySN": "000000",
"memoryModel": "abcdefg",
"cpuSN": "000000",
"cpuModel": "MIPS 74Kc V4.12",
"mac": "00:1F:64:CE:F3:8E",
"hostsn": "01010730b12014A00477",
"hostModel": "CS-VIC-1999-C",
"stCompany": "Beijing Autelan Technology",
"boardSN": "01010730b12014A00477",
"networkCardMac": "00:1F:64:CE:F3:8F",
"lowFreModel": "AR9344",
"lowFreSN": "000000",
"hignFreModel": "AR9582",
"hignFreSN": "000000",
"gpsModel": "abcdefg",
"gpsSN": "000000"
}
]
jq .[] apinfo.json
{
"firmwareVersion": "1.0.6.29",
"hardVersion": "1.20",
"Operators": "CTCC",
"iccid": "DATA DATA",
"snOf3g": "A000004E123ABD2",
"modelOf3g": "MC271X",
"Company_3g": "ZTEMT INCORPORATED",
"MEID_3g": "A000004E123ABD2",
"memorySN": "000000",
"memoryModel": "abcdefg",
"cpuSN": "000000",
"cpuModel": "MIPS 74Kc V4.12",
"mac": "00:1F:64:CE:F3:8E",
"hostsn": "01010730b12014A00477",
"hostModel": "CS-VIC-1999-C",
"stCompany": "Beijing Autelan Technology",
"boardSN": "01010730b12014A00477",
"networkCardMac": "00:1F:64:CE:F3:8F",
"lowFreModel": "AR9344",
"lowFreSN": "000000",
"hignFreModel": "AR9582",
"hignFreSN": "000000",
"gpsModel": "abcdefg",
"gpsSN": "000000"
}
$ jq -r .[].mac apinfo.json
00:1F:64:CE:F3:8E
$ jq -r '.[] | .mac' apinfo.json
00:1F:64:CE:F3:8E
$ jq -r '.[] |.mac, .gpsSN' apinfo.json
00:1F:64:CE:F3:8E
000000
jq -r '.[].mac, .[].gpsSN' apinfo.json
00:1F:64:CE:F3:8E
000000
示例3:
黑屏调用loki api查询日志,只需要日志信息,不需要其他数据
[root@k8s-master ~]# curl -G -s "http://10.96.192.13:3100/loki/api/v1/query_range?limit=5000&start=1684908000000000000&end=1684922400000000000&step=120" --data-urlencode 'query={namespace="eps-prod",pod="prod-bos-group-1-v11-f448dcc98-4852s"}'| jq -r .data.result[0].values
[
[
"1684996680999039395",
"{\"log\":\"10.244.235.192 - - [25/May/2023:14:38:00 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:38:00.975689945Z\"}"
],
[
"1684996680247118267",
"{\"log\":\"10.244.235.192 - - [25/May/2023:14:38:00 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:38:00.177041759Z\"}"
],
[
"1684996679996582238",
"{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:59 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:59.973895032Z\"}"
],
[
"1684996679996575659",
"{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:59 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:59.790327561Z\"}"
],
[
"1684996679745831827",
"{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:59 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:59.611419648Z\"}"
],
[
"1684996679495370140",
"{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:59 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:59.401911438Z\"}"
],
[
"1684996678744244888",
"{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:58 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:58.637100763Z\"}"
],
[
"1684996678493815519",
"{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:58 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:58.4453956Z\"}"
],
[
"1684996678243206770",
"{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:58 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:58.202226575Z\"}"
],
[
"1684996677992997930",
"{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:57 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:57.894751311Z\"}"
],
[
"1684996677241572206",
"{\"log\":\"10.244.235.192 - - [25/May/2023:14:37:57 +0800] \\\"GET / HTTP/1.1\\\" 200 612 \\\"-\\\" \\\"curl/7.29.0\\\"\\n\",\"stream\":\"stdout\",\"time\":\"2023-05-25T06:37:57.109562432Z\"}"
]
]
接口:GET /loki/api/v1/query_range
数据限制:limit=5000 // 这是最大值
start:开始时间 // 时间戳单位是纳秒
end:结束时间
–data-urlencode:请求体编码
query:查询语句
jq:json数据处理