當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Shell下处理JSON数据工具向导
生活随笔
收集整理的這篇文章主要介紹了
Shell下处理JSON数据工具向导
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
身份運算符 ---
標識符-索引 ---
對象索引 ---
數組索引 ---
數組/字符串切片 ---
數組/對象值迭代器 ---
逗號 ---
管道 ---
括號 ---
數組 ---
字典 ---
參考演示數據 ---
- 下載離線安裝包
-
安裝
- 源碼包安裝
- 選項及含義
- JQ 程序代碼演示在線平臺
-
JQ 語法
-
基本過濾器
- 身份運算符 ---
. - 標識符-索引 ---
.foo`, `.foo.bar - 對象索引 ---
.[<string>] - 數組索引 ---
.[<number>] - 數組/字符串切片 ---
.[<number>:<number>] - 數組/對象值迭代器 ---
.[] - 逗號 ---
, - 管道 ---
| - 括號 ---
()
- 身份運算符 ---
-
數據類型
- 數組 ---
[] - 字典 ---
{}
- 數組 ---
- 內置運算符
- 內置函數
-
基本過濾器
- 參考演示數據 ---
suosuo.json -
參考命令
-
打印
- 去除引號
-
元素獲取
- 當一級元素并列存在2個或2個以上的字典時
- 當一級元素并列存在2個或2個以上的列表時
- 當一級元素為一個列表【數組】時 -- 根據索引獲取元素
- 當一級元素為一個字典時 -- 根據 Key 獲取 Value
-
場景代碼示例
- 獲取硬盤分區
- 獲取所有硬盤設備名 --- lsblk
- 獲取 Docker 容器網絡配置
-
高級用法示例
- 賦值
- 對結果重定向
- 字典的構造
- 數組的構造
- 嵌套字典的構造
- 嵌套列表的構造
-
打印
- 參考網址
jq程序是一個"過濾器"。它接受一個輸入, 然后生成一個輸出,有很多內置的過濾器用于提取對象的特定字段,或者將數字轉換為字符串, 或其他各種標準任務。
該過濾器可以以各種方式組合,可以通過管道將將一個濾波器轉換為另一個濾波器,或收集濾波器的輸出為一個數組。
有些過濾器會產生多個結果,例如, 生成其輸入數組的所有元素。管道過濾器 第二次運行第二過濾器,用于每個元素, 陣一般來說,用循環和迭代完成的事情 在其他語言中,只是通過將jq中的過濾器粘合在一起來完成。
# 重要的是要記住,每個過濾器都有一個輸入和一個輸出。即使是像"hello" 或 42 這樣的文字也是過濾器-它們采用輸入, 但總是產生與輸出相同的文字。的操作 聯合收割機兩個過濾器,如加法,通常提供相同的輸入, 兩者和聯合收割機組合結果。所以,你可以實現一個平均 過濾器作為add / length -將輸入數組都饋送到add 濾波器和length濾波器,然后進行除法。
jq過濾器在JSON數據流上運行。jq的輸入是解析為空格分隔的JSON值序列, 一次一個地通過所提供的過濾器。過濾器的輸出被寫入標準輸出,作為以換行符分隔的JSON數據序列。
最簡單和最常見的過濾器(或jq程序)是`.`, 它是恒等運算符,復制jq的輸入,處理器到輸出流。 因為 jq 處理器從輸入流讀取JSON文本, 然后漂亮的打印輸出,`.` 程序的主要用途是驗證并打印輸入。 JQ編程語言是相當豐富的,它允許的不僅僅是驗證和精美印刷。
# 注意:注意shell的引用規則是很重要的。 作為一般來說,最好使用總是引用(單引號字符)的jq程序,因為太多的字符與特殊 jq 的含義也是shell元字符。在 jq 中使用單引號字符程序和反斜杠轉義的雙引號(\")程序舉例如下。
Unix shell: jq '.["foo"]'
Powershell: jq '.[\"foo\"]'
Windows命令 shell: jq ".[\"foo\"]"
# 注意:jq允許用戶自定義函數, 但每個 jq 程序必須有一個*表達式。
下載離線安裝包
官方 --- Download Package --- jq
安裝
# Python 解析 json 數據
pip3 install yq
# Linux 安裝
yum -y install jq
dnf -y install jq
apt-get install jq
# Mac 安裝
brew install jq
# Win 安裝
scoop install jq
源碼包安裝
git clone --recursive https://github.com/jqlang/jq.git
cd jq
autoreconf -i
./configure
make
sudo make install
選項及含義
| 選項 | 含義 |
|---|---|
| -c | 壓縮為一行輸出,默認情況下,jq會漂亮地打印JSON輸出。 |
| -r | 輸出原始字符串,而非json格式字符串,【去除引號】 |
| -M | 禁用顏色, 默認終端可以強制它產生顏色 |
| --tab | 每個縮進級別使用一個制表符,而不是兩個空格 |
| --indent n | 指定給定數量的空格(不超過7)進行縮進, 默認縮進空格為 2 個 |
| -f``/`-from-file | 從文件中讀取篩選器,可使用"#"來進行注釋 |
JQ 程序代碼演示在線平臺
JQ Command Line --- 代碼演示在線平臺
JQ 語法
基本過濾器
身份運算符 --- .
最簡單的過濾器是`.`。 該過濾器將其輸入并產生與輸出相同的值。 就是這個是身份運算符
# 注意: jq 默認會漂亮地打印所有輸出, 一個只包含 `.` 的程序可以用來格式化 JSON輸出。類似于 curl。
代碼演示 -- 折疊
[root@localhost ~]# cat > dd.json << EOF
"Hello, world! 你好,世界!"
EOF
[root@localhost ~]# cat dd.json | jq '.'
"Hello, world! 你好,世界!"
[root@localhost ~]#
[root@localhost ~]# cat > dd.json << EOF
0.12345678901234567890123456789
EOF
[root@localhost ~]#
[root@localhost ~]# cat dd.json | jq '.'
0.12345678901234567890123456789
標識符-索引 --- .foo`, `.foo.bar
最簡單且有用的過濾器類似形式 `.foo`。當給定一個 JSON對象(又名字典或哈希)作為輸入時, `.foo` 表示鍵"foo"處的值, 如果鍵不存在,則為null。
形式為.foo.bar的過濾器等效于.foo | .bar
# 注意: 鍵名是由字母、數字、下劃線組成的字符串,且開頭必須為字母或下劃線, 且不得包含中文;
代碼演示 -- 折疊
[root@localhost ~]# cat > dd.json << EOF
{"_name": "fd中", "23ff": 24, "age": "dd", "sal$": 100, "結果是": true, "is": false}
EOF
[root@localhost ~]# cat dd.json | jq .age
"dd"
[root@localhost ~]# cat dd.json | jq ._name
"fd中"
[root@localhost ~]# cat dd.json | jq '._name'
"fd中"
[root@localhost ~]# cat dd.json | jq '.23ff' # 語法報錯
[root@localhost ~]# cat dd.json | jq '.結果是' # 語法報錯
[root@localhost ~]# cat dd.json | jq ".sal$" # 語法報錯
[root@localhost ~]# cat dd.json | jq '.is'
false
對象索引 --- .[<string>]
該語法為查找對象,
.["foo"](上面的.foo是這個的簡寫版本,但是僅用于類似標識符的字符串)。
數組索引 --- .[<number>]
數組從 0 開始為它的每一個元素順序創建下標索引,直到總長度減一。要訪問它的某個元素,以方括號加下標值的方式即可;
允許使用負索引, -1 表示最后一個元素,-2 表示倒數第二個元素,依此類推;
代碼演示 -- 折疊
[root@localhost ~]# cat > ee.json << EOF
> ["a","b","c","d","e"]
> EOF
[root@localhost ~]# cat ee.json | jq .[2]
"c"
[root@localhost ~]# cat ee.json | jq .[5]
null
[root@localhost ~]# cat ee.json | jq .[-1]
"e"
數組/字符串切片 --- .[<number>:<number>]
`[start:end]`
切片指的是對序列進行截取,選取序列中的某一段。
以冒號分割索引,start代表起點索引,end代表結束點索引。省略start表示以0開始,省略end表示到列表的結尾。
# 注意: 區間是左閉右開的。也就是說[1:4]會截取列表的索引為1/2/3的3個元素,不會截取索引為4的元素。
如果提供的是負整數下標,則從列表的最后開始往頭部查找。例如-1表示最后一個元素,-3表示倒數第三個元素。
# 注意: 該切片過程中不可以設置步長。
代碼演示 -- 折疊
[root@localhost ~]# cat > ff.json << EOF
> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> EOF
[root@localhost ~]# cat ff.json | jq .[2:5] -c
[3,4,5]
[root@localhost ~]# cat ff.json | jq .[:5] -c
[1,2,3,4,5]
[root@localhost ~]# cat ff.json | jq .[2:] -c
[3,4,5,6,7,8,9,10]
[root@localhost ~]# cat ff.json | jq .[-3:] -c
[8,9,10]
[root@localhost ~]# cat ff.json | jq .[:-3] -c
[1,2,3,4,5,6,7]
[root@localhost ~]# cat ff.json | jq .[-1] -c
10
數組/對象值迭代器 --- .[]
在使用 `.[index]` 即數組索引語法時, 但若是省略索引,它將迭代該數組產生一個一個的獨立的結果,而不是作為一個完整結果;
# 注意: 當數組為空時,`.[]` 的結果為 none ;
代碼演示 -- 折疊
[root@localhost ~]# cat > ff.json << EOF
> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
> EOF
[root@localhost ~]# cat ff.json | jq .[]
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# cat > gg.json << EOF
[{"name":"JSON", "good":true}, {"name":"XML", "habby":[11,22,33]}]
EOF
[root@localhost ~]# cat gg.json | jq .[] -c
{"name":"JSON","good":true}
{"name":"XML","habby":[11,22,33]}
[root@localhost ~]# cat gg.json | jq .[1].habby
[
11,
22,
33
]
[root@localhost ~]# cat gg.json | jq .[1].habby[]
11
22
33
逗號 --- ,
該語法為多個過濾器之間的分隔符;
如果兩個過濾器之間用逗號分隔, 則相同的輸入將分別進入到兩個過濾器, 而輸出也將按順序單獨輸出。
代碼演示 -- 折疊
[root@localhost ~]# cat > hh.json << EOF
{"foo": 42, "bar": "something else", "projects": [11,22,33,44,55]}
EOF
[root@localhost ~]#
[root@localhost ~]# cat hh.json | jq '.foo, .bar'
42
"something else"
[root@localhost ~]#
[root@localhost ~]# cat hh.json | jq '.foo, .projects[]'
42
11
22
33
44
55
[root@localhost ~]#
[root@localhost ~]# cat hh.json | jq '.foo, .projects[0,4]'
42
11
55
管道 --- |
該運算符通過將左邊的輸出 當做是 右邊的輸入, 類似于 Unix shell的管道符號, 作用大致一樣;
.a | . | .b 與.a.b 是等價的
代碼演示 -- 折疊
[root@localhost ~]# cat > ii.json << EOF
[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]
EOF
[root@localhost ~]# cat ii.json | jq '.[] | .name'
"JSON"
"XML"
括號 --- ()
括號作為一個分組操作符,就像在任何典型的 編程語言;
代碼演示 -- 折疊
[root@localhost ~]# cat > jj.json << EOF
1
EOF
[root@localhost ~]# cat jj.json | jq '(. + 2) * 5'
15
數據類型
數組 --- []
與JSON一樣,[]用于構造數組, 索引從 0 開始,負索引從 -1 開始;
代碼演示 -- 折疊
root@localhost ~]# cat > kk.json << EOF
> [1, 2, 3, 4, 5, 6]
> EOF
[root@localhost ~]# cat kk.json | jq '[ .[] | . * 2]' -c
[2,4,6,8,10,12]
[root@localhost ~]# cat > ll.json << EOF
{"con": "china", "bar": "something else", "projects": [11,22,33,44,55]}
EOF
[root@localhost ~]# cat ll.json | jq '[.con, .projects[]]' -c
["china",11,22,33,44,55]
字典 --- {}
與JSON類似,{}用于構造對象(也稱為 字典或散列),如:{"a": 42, "b": 17}。
# 注意: 鍵名是由字母、數字、下劃線組成的字符串,且開頭必須為字母或下劃線, 且不得包含中文;
代碼演示 -- 折疊
[root@localhost ~]# cat > mm.json << EOF
> {"user":"stedolan","titles":["JQ Primer", "More JQ"]}
> EOF
[root@localhost ~]#
[root@localhost ~]# cat mm.json | jq '{user, title: .titles[]}'
{
"user": "stedolan",
"title": "JQ Primer"
}
{
"user": "stedolan",
"title": "More JQ"
}
[root@localhost ~]# cat mm.json | jq '{(.user): .titles}'
{
"stedolan": [
"JQ Primer",
"More JQ"
]
}
內置運算符
內置運算符: + , - , * , / , %
x % y計算 x 模 y
內置函數
abs # 對于數字輸入,計算絕對值
length # 獲取各種長度,對與不同數據類型,數組計算長度,字符串計算字符個數;
map # 將表達式映射應用于輸入數組或對象中的每個值
del # 刪除數組或字典中的元素
has # 判斷返回輸入字典或列表中是否具有給定的鍵
。。。。。。 有很多和 python 中的內置函數一致;
參考演示數據 --- suosuo.json
# 壓縮為一行數據顯示
[{"name":"suosuo","age":106,"is marry":"0","url":"http://mirrors.suosuo1930.com","salary":"100 million","address":{"city001":"* -- 沙雅","city002":"* -- 庫車","city003":"吉林 -- 長春","city004":"浙江 -- 杭州"},"commit":{"author":{"name":"itchyny","email":["it@.co.jp","it@.dd.jp","it@.cc.jp"],"date":"2023-12-19T08:54:53Z","verifi":{"verified":true,"reason":"valid"}}},"arrayBrowser":[{"name":"Google","url":"http://www.google.com"},{"name":"Baidu","url":"http://www.baidu.com"}]},{"name":"雯雯","age":101,"is marry":"1","url":"http://www.wenwen.com","salary":"200 million","address":{"city001":"河南 -- 鄭州","city002":"河北 -- 雄安","city003":"山東 -- 曲阜","city004":"浙江 -- 嘉興"},"commit":{"author":{"name":"dependabot[bot]","email":["+depen@github.com","+depen@ee.com","+depen@ff.com"],"date":"2023-12-18T14:18:47Z","verifi":{"verified":true,"reason":"invalid"}}},"arrayBrowser":[{"name":"bing","url":"http://www.bing.com"},{"name":"Tshihua","url":"http://www.Tshihua.com"}]},{"name":"楠楠","age":99,"is marry":"0","url":"http://cn.nannan.com","salary":"300 million","address":{"city001":"* -- 阿克蘇","city002":"浙江 -- 紹興","city003":"安徽 -- 黃山","city004":"南極 -- 特拉蓋"},"commit":{"author":{"name":"github-actions[bot]","email":["+act@noreply.com","+act@gg.com","+act@hh.com"],"date":"2023-12-13T19:52:03Z","verifi":{"verified":false,"reason":"valid"}}},"arrayBrowser":[{"name":"PKU","url":"https://www.pku.edu.cn/"},{"name":"Docker","url":"https://docs.docker.com/engine/install/centos/"}]}]
# JSON 數據書寫規范 1. 字典中最后一對 key--value 對不可以加 逗號,其他對最后必須加 逗號,表示元素的分隔; 2. 列表同理,以 逗號 分隔每一個元素,且最后一個元素后不可以加 逗號
參考命令
打印
# 格式化輸出 json 數據
參考演示代碼示例 -- 折疊
root@localhost ~]# cat suosuo.json | jq .
[
{
"name": "suosuo",
"age": 106,
"is marry": "0",
"url": "http://mirrors.suosuo1930.com",
"salary": "100 million",
"address": {
"city001": "* -- 沙雅",
"city002": "* -- 庫車",
"city003": "吉林 -- 長春",
"city004": "浙江 -- 杭州"
},
"commit": {
"author": {
"name": "itchyny",
"email": [
"it@.co.jp",
"it@.dd.jp",
"it@.cc.jp"
],
"date": "2023-12-19T08:54:53Z",
"verifi": {
"verified": true,
"reason": "valid"
}
}
},
"arrayBrowser": [
{
"name": "Google",
"url": "http://www.google.com"
},
{
"name": "Baidu",
"url": "http://www.baidu.com"
}
]
},
{
"name": "雯雯",
"age": 101,
"is marry": "1",
"url": "http://www.wenwen.com",
"salary": "200 million",
"address": {
"city001": "河南 -- 鄭州",
"city002": "河北 -- 雄安",
"city003": "山東 -- 曲阜",
"city004": "浙江 -- 嘉興"
},
"commit": {
"author": {
"name": "dependabot[bot]",
"email": [
"+depen@github.com",
"+depen@ee.com",
"+depen@ff.com"
],
"date": "2023-12-18T14:18:47Z",
"verifi": {
"verified": true,
"reason": "invalid"
}
}
},
"arrayBrowser": [
{
"name": "bing",
"url": "http://www.bing.com"
},
{
"name": "Tshihua",
"url": "http://www.Tshihua.com"
}
]
},
{
"name": "楠楠",
"age": 99,
"is marry": "0",
"url": "http://cn.nannan.com",
"salary": "300 million",
"address": {
"city001": "* -- 阿克蘇",
"city002": "浙江 -- 紹興",
"city003": "安徽 -- 黃山",
"city004": "南極 -- 特拉蓋"
},
"commit": {
"author": {
"name": "github-actions[bot]",
"email": [
"+act@noreply.com",
"+act@gg.com",
"+act@hh.com"
],
"date": "2023-12-13T19:52:03Z",
"verifi": {
"verified": false,
"reason": "valid"
}
}
},
"arrayBrowser": [
{
"name": "PKU",
"url": "https://www.pku.edu.cn/"
},
{
"name": "Docker",
"url": "https://docs.docker.com/engine/install/centos/"
}
]
}
]
# 需注意以下幾點: 1. 不管是 列表 還是 字典, 在最后一個元素后不可添加 逗號 `,`;
去除引號
[root@localhost demo01]# cat suosuo.json | jq .[0] | jq .arrayBrowser[0].name
"Google"
[root@localhost demo01]# cat suosuo.json | jq .[0] | jq .arrayBrowser[0].name -r
Google
元素獲取
當一級元素并列存在2個或2個以上的字典時
[root@localhost demo01]# cat demo.json | jq .
{
"name": "suosuo",
"age": 200
}
{
"name": "pingping",
"age": 300,
"salary": "100k"
}
[root@localhost demo01]# cat demo.json | jq .name
"suosuo"
"pingping"
[root@localhost demo01]# cat demo.json | jq .salary
null
"100k"
[root@localhost demo01]# cat demo.json | jq .dddd
null
null
- 匹配某一個 key 時,會在每個字典中匹配
- 當 key 不存在時,value 為 null
當一級元素并列存在2個或2個以上的列表時
[root@localhost demo01]# cat demo02.json | jq .
[
"100",
"200"
]
[
"300",
"400"
]
[root@localhost demo01]# cat demo02.json | jq .[0]
"100"
"300"
[root@localhost demo01]# cat demo02.json | jq .[3]
null
null
[root@localhost demo01]# cat demo02.json | jq .[-1:]
[
"200"
]
[
"400"
]
- 根據索引獲取元素時,會在每個列表中匹配
- 當 索引元素 不存在時,value 為 null
當一級元素為一個列表【數組】時 -- 根據索引獲取元素
[root@localhost ~]# cat suosuo.json | jq .[0]
1. 數組索引從 0 開始執行結果 -- 折疊
{ "name": "suosuo", "age": 106, "is marry": "0", "url": "http://mirrors.suosuo1930.com", "salary": "100 million", "address": { "city001": "* -- 沙雅", "city002": "* -- 庫車", "city003": "吉林 -- 長春", "city004": "浙江 -- 杭州" }, "commit": { "author": { "name": "itchyny", "email": [ "it@.co.jp", "it@.dd.jp", "it@.cc.jp" ], "date": "2023-12-19T08:54:53Z", "verifi": { "verified": true, "reason": "valid" } } }, "arrayBrowser": [ { "name": "Google", "url": "http://www.google.com" }, { "name": "Baidu", "url": "http://www.baidu.com" } ] }
當一級元素為一個字典時 -- 根據 Key 獲取 Value
[root@localhost ~]# cat suosuo.json | jq .[0].name
"suosuo"
[root@localhost ~]# cat suosuo.json | jq .[0].address
{
"city001": "* -- 沙雅",
"city002": "* -- 庫車",
"city003": "吉林 -- 長春",
"city004": "浙江 -- 杭州"
}
[root@localhost ~]# cat suosuo.json | jq .[0].address.city003
"吉林 -- 長春"
[root@localhost ~]# cat suosuo.json | jq .[0].arrayBrowser
[
{
"name": "Google",
"url": "http://www.google.com"
},
{
"name": "Baidu",
"url": "http://www.baidu.com"
}
]
[root@localhost ~]# cat suosuo.json | jq .[0].arrayBrowser[0]
{
"name": "Google",
"url": "http://www.google.com"
}
[root@localhost ~]# cat suosuo.json | jq .[0].arrayBrowser[0].name
"Google"
# 解決方法 --- 待之后解答
[root@localhost ~]# cat suosuo.json | jq .[0].arrayBrowser.[0]
jq: error: syntax error, unexpected '[', expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:
.[0].arrayBrowser.[0]
jq: 1 compile error
- 獲取字典元素,使用 點
.調用的方式- 對于字典多層嵌套內部鍵值數據的獲取,可使用連續 點
.調用的方式
場景代碼示例
獲取硬盤分區
sfdisk -J /dev/sda | jq .partitiontable.partitions[2].node
獲取所有硬盤設備名 --- lsblk
[root@localhost ~]# lsblk -d -n -J | jq .blockdevices[].name -r
sda
nvme0n1
nvme0n2
獲取 Docker 容器網絡配置
[root@localhost ~]# docker inspect <容器名> | jq .[0].NetworkSettings.IPAddress -r
172.17.0.2
高級用法示例
賦值
[root@localhost ]# cat kk.json
{
"name": "suosuo"
}
[root@localhost ]# jq .name="[1,3,4]" kk.json | jq .
{
"name": [
1,
3,
4
]
}
對結果重定向
jq .name="[1,3,4]" kk.json | jq -c . > jj.json
# 轉義: 不可再重定向到自身文件,若想更新自身文件,可通過重定向到中間文件,再覆蓋到自身文件
[root@localhost ]# cat jj.json
{"name":[1,3,4]}
字典的構造
[root@localhost ~]# cat suosuo.json | jq .[0] | jq '{city002: .address.city002, reason: .commit.author.verifi.reason}'
{
"city002": "* -- 庫車",
"reason": "valid"
}
# 等價于如下過濾器
[root@localhost ~]# cat suosuo.json | jq '.[0] | {city002: .address.city002, reason: .commit.author.verifi.reason}'
{
"city002": "* -- 庫車",
"reason": "valid"
}
# 使用迭代器語法
[root@localhost ~]# cat suosuo.json | jq '.[] | {city002: .address.city002, reason: .commit.author.verifi.reason}'
{
"city002": "* -- 庫車",
"reason": "valid"
}
{
"city002": "河北 -- 雄安",
"reason": "invalid"
}
{
"city002": "浙江 -- 紹興",
"reason": "valid"
}
數組的構造
[root@localhost ~]# cat suosuo.json | jq '[.[] | {city002: .address.city002, reason: .commit.author.verifi.reason}]'
[
{
"city002": "* -- 庫車",
"reason": "valid"
},
{
"city002": "河北 -- 雄安",
"reason": "invalid"
},
{
"city002": "浙江 -- 紹興",
"reason": "valid"
}
]
數組構造代碼示例 -- 折疊
[root@localhost ~]# cat suosuo.json | jq '[.[] | {city002: .address.city002, reason: .commit.author.verifi.reason, email: [.commit.author.email]}]'
[
{
"city002": "* -- 庫車",
"reason": "valid",
"email": [
[
"it@.co.jp",
"it@.dd.jp",
"it@.cc.jp"
]
]
},
{
"city002": "河北 -- 雄安",
"reason": "invalid",
"email": [
[
"+depen@github.com",
"+depen@ee.com",
"+depen@ff.com"
]
]
},
{
"city002": "浙江 -- 紹興",
"reason": "valid",
"email": [
[
"+act@noreply.com",
"+act@gg.com",
"+act@hh.com"
]
]
}
]
[root@localhost ~]#
[root@localhost ~]# cat suosuo.json | jq '[.[] | {city002: .address.city002, reason: .commit.author.verifi.reason, email: [.commit.author.email[0]]}]'
[
{
"city002": "* -- 庫車",
"reason": "valid",
"email": [
"it@.co.jp"
]
},
{
"city002": "河北 -- 雄安",
"reason": "invalid",
"email": [
"+depen@github.com"
]
},
{
"city002": "浙江 -- 紹興",
"reason": "valid",
"email": [
"+act@noreply.com"
]
}
]
[root@localhost ~]#
[root@localhost ~]# cat suosuo.json | jq '[.[] | {city002: .address.city002, reason: .commit.author.verifi.reason, email: [.commit.author.email[]]}]'
[
{
"city002": "* -- 庫車",
"reason": "valid",
"email": [
"it@.co.jp",
"it@.dd.jp",
"it@.cc.jp"
]
},
{
"city002": "河北 -- 雄安",
"reason": "invalid",
"email": [
"+depen@github.com",
"+depen@ee.com",
"+depen@ff.com"
]
},
{
"city002": "浙江 -- 紹興",
"reason": "valid",
"email": [
"+act@noreply.com",
"+act@gg.com",
"+act@hh.com"
]
}
]
嵌套字典的構造
[root@localhost ~]# cat suosuo.json | jq '[.[0] | {city002: .address.city002, reason: .commit.author.verifi.reason, email: {list: .commit.author.email}}]'
[
{
"city002": "* -- 庫車",
"reason": "valid",
"email": {
"list": [
"it@.co.jp",
"it@.dd.jp",
"it@.cc.jp"
]
}
}
]
[root@localhost ~]# cat suosuo.json | jq '[.[] | {city002: .address.city002, reason: .commit.author.verifi.reason, email: {list: .commit.author.email}}]'
[
{
"city002": "* -- 庫車",
"reason": "valid",
"email": {
"list": [
"it@.co.jp",
"it@.dd.jp",
"it@.cc.jp"
]
}
},
{
"city002": "河北 -- 雄安",
"reason": "invalid",
"email": {
"list": [
"+depen@github.com",
"+depen@ee.com",
"+depen@ff.com"
]
}
},
{
"city002": "浙江 -- 紹興",
"reason": "valid",
"email": {
"list": [
"+act@noreply.com",
"+act@gg.com",
"+act@hh.com"
]
}
}
]
嵌套列表的構造
[root@localhost ~]# cat suosuo.json | jq '[.[0] | {city002: .address.city002, reason: .commit.author.verifi.reason, email: [.commit.author.email[]]}, "sfsfsf"]'
[
{
"city002": "* -- 庫車",
"reason": "valid",
"email": [
"it@.co.jp",
"it@.dd.jp",
"it@.cc.jp"
]
},
"sfsfsf"
]
[root@localhost ~]# cat suosuo.json | jq '[.[0] | {city002: .address.city002, reason: .commit.author.verifi.reason}, [.commit.author.email[]]]'
[
{
"city002": "* -- 庫車",
"reason": "valid"
},
[
"it@.co.jp",
"it@.dd.jp",
"it@.cc.jp"
]
]
[root@localhost ~]# cat suosuo.json | jq '[.[0] | {city002: .address.city002, reason: .commit.author.verifi.reason, age: "999"}, [.commit.author.email[]]]'
[
{
"city002": "* -- 庫車",
"reason": "valid",
"age": "999"
},
[
"it@.co.jp",
"it@.dd.jp",
"it@.cc.jp"
]
]
參考網址
JSON 在線格式化或解析平臺
官方手冊 --- jq Manual
總結
以上是生活随笔為你收集整理的Shell下处理JSON数据工具向导的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文心一言 VS 讯飞星火 VS chat
- 下一篇: 铭凡 UM790 Pro 迷你主机价格公