jq 命令详解
jq 命令詳解
命令jq可以對 json數據 進行分片、過濾、映射和轉換
它能輕松地把你擁有的數據轉換成你期望的格式,而且需要寫的程序通常也比你期望的更加簡短
=
總結
= =
= =
安裝
yum -y install jq=
命令格式
# 格式 cat json.txt | jq 'cmd'# 不同的 cmd 可對數據進行不同的過濾# 基礎用法:以下三者等效cat json.txt | jq '.[]' # 標準格式。。。cat json.txt | jq '.'cat json.txt | jq .演示:
# 源文件(可讀性差) [root@centos7 ~]#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 . 實現優美輸出 [root@centos7 ~]#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"}]} ]=
=
指定輸出列表的第幾個元素
注:.[0]表示第一個。。。(引號可省略)
[root@centos7 ~]#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"}] }# 只輸出第二個 [root@centos7 ~]#cat json.txt | jq .[1] {"name": "站長之家","url": "http://tool.zzhome.com","address": {"city": "大連","country": "中國"},"arrayBrowser": [{"name": "360","url": "http://www.so.com"},{"name": "bing","url": "http://www.bing.com"}] }# 不存在則輸出 null [root@centos7 ~]#cat json.txt | jq .[2] null=
過濾指定的字段
- 有管道操作時,必須使用引號、必須使用元素括號
- 引號用來將jq之后的所有內容括起來
標準格式:
# 不限定元素 cat json.txt | jq '.[] | {name-1:.aabb,name-2:.xx.yy}'# 解釋。。。。。。。。。。。。 name-1 、 name-2 為'自定義key' .aabb 、 .xx.yy 為源文本中存在的字段的值 #------------------------------------------------------## 指定第幾個元素再過濾 cat json.txt | jq '.[0] | {name:.name,city:.address.city}' cat json.txt | jq '.[1] | {name:.arrayBrowser[1].name,city:.address.city}'效果:
# 全文操作 [root@centos7 ~]#cat json.txt | jq '.[] | {n1:.name,n2:.address.city,n3:.address.country}' {"n1": "站長工具","n2": "廈門","n3": "中國" } {"n1": "站長之家","n2": "大連","n3": "中國" }# 指定元素過濾 [root@centos7 ~]#cat json.txt | jq '.[0] | {n1:.name,n2:.address.city,n3:.address.country}' {"n1": "站長工具","n2": "廈門","n3": "中國" }[root@centos7 ~]#cat json.txt | jq '.[1] | {n1:.name,n2:.address.city,n3:.address.country}' {"n1": "站長之家","n2": "大連","n3": "中國" }=
輸出數組
操作:在引號內部使用[]將所有內容括起來
# 格式 cat json.txt | jq "[ cmd ]"# 范例 cat json.txt | jq "[.[] | {name:.arrayBrowser[1].name,city:.address.city}]"數組輸出對比效果:
# 不用數組: [root@centos7 ~]#cat json.txt | jq ".[] | {name:.arrayBrowser[1].name,city:.address.city}" {"name": "Baidu","city": "廈門" } {"name": "bing","city": "大連" }# 使用數組: [root@centos7 ~]#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}]" cat json.txt | jq ".[] | {CAOKUNZI_001:.arrayBrowser[1].name,ZHUBAZI_002:.address.city}"演示:
[root@centos7 ~]#cat json.txt | jq "[.[] | {name_001:.arrayBrowser[1].name,city_002:.address.city}]" [{"name_001": "Baidu","city_002": "廈門"},{"name_001": "bing","city_002": "大連"} ][root@centos7 ~]#cat json.txt | jq ".[] | {CAOKUNZI_001:.arrayBrowser[1].name,ZHUBAZI_002:.address.city}" {"CAOKUNZI_001": "Baidu","ZHUBAZI_002": "廈門" } {"CAOKUNZI_001": "bing","ZHUBAZI_002": "大連" }wan
總結
- 上一篇: linux的xml文件格式,linux
- 下一篇: 人生必看的一百部电影