Linux中在命令行中使用JQ來解析修改JSON字符串
在現(xiàn)實(shí)開發(fā)場景中, 經(jīng)常需要在命令行中做一些解析json數(shù)據(jù)的工作,在linux中并沒有提供太多有用了工具來幫你完成這樣的工作,在經(jīng)過尋找以后發(fā)現(xiàn)一個叫做jq的工具,可以幫你在命令行中做相關(guān)的解析工作。
要使用請先安裝
sudo apt-get install jq -y
- 查找所需要的屬性(查詢)
通過命令行,我們首先使用jd來從json字符串中解析我們所需要的屬性。
首先我們先新建一個json文件,打開命令行輸入:
gedit info.json
這個命令會新建一個info.json的文件,并通過Ubuntu自帶的編輯器打開,
復(fù)制下面的json到文件中,保存
{
"name": "Orange",
"location":
{
"city": "China"
},
"Company":
{
"name": "Siemens",
"division": "Developer"
}
}
然后在命令行中輸入下面命令:
cat cat test.json | jq '.name' | jq '.name'
"Orange"cat info.json | jq '.location.city'
"China"
如果有多個屬性需要查詢,例如Company下面有name以及division屬性,我們可以用一下命令cat info.json |jq '.Company|{name,division}'
{ "name": "Siemens", "division": "Developer" }
是不是很簡單,這樣你想要查詢?nèi)魏我粋€json的數(shù)據(jù)只要按照這個寫法就好了
- 修改json字符串的值(修改)
樓主現(xiàn)在公司做AWS CloudFormation有關(guān)的東西,AWS CloudFormation的配置是需要讀取各種Json的配置文件的,通過是講Json堆棧的配置文件轉(zhuǎn)換成為一整套的AWS資源。所以我經(jīng)常需要更新我的Json配置。但是AWS基本都是在linux上遠(yuǎn)程操作,然后通過腳本來進(jìn)行自動測試,所以修改Json的配置文件是不可缺少的一項(xiàng)技能。
本文借此在這里來談?wù)勅绾问褂胘q來修改Json文件
修改object類型的json
{
"honesty": "Apple Jack",
"laughter": "Pinkie Pie",
"loyalty": "Rainbow Dash"
}
把之前的info.json文件打開,刪掉原來的內(nèi)容,講上面的json復(fù)制進(jìn)去,
我們可以看到,honesty的值當(dāng)前為“Apple Jack”,現(xiàn)在如果我想講“Apple Jack”更改為其他的值Orange:
cat info.json |
jq 'to_entries |
map(if .key == "honesty"
then . + {"value":"Orange"}
else .
end
) |
from_entries'
輸出:
{
"honesty": "Orange",
"laughter": "Pinkie Pie",
"loyalty": "Rainbow Dash"
}
通常情況下,我們只需要更改鍵的值就可以了。但是有的時(shí)候我需要連鍵一起更改的話,我們需要這么做:
cat info.json |
jq 'to_entries |
map(if .key == "honesty"
then . + {"key":"Orange"}
else .
end
) |
from_entries'
輸出
{
"Orange": "Apple Jack",
"laughter": "Pinkie Pie",
"loyalty": "Rainbow Dash"
}
如果想將修改后的字符串輸入到文件中,只需要在命令后面追加
> new.json
覆蓋掉原來的文件的內(nèi)容,如果存在的話
>> new.json
在原來文件的后面追加新的內(nèi)容,不會覆蓋原來文件的內(nèi)容
- 我們知道在上述命令中使用了cat info.json | jq to_entries,通過這個命令,我們就能查看json的具體結(jié)構(gòu),map函數(shù)也是根據(jù)這個json的結(jié)構(gòu)幫我們做了遍歷操作
[
{
"key": "honesty",
"value": "Apple Jack"
},
{
"key": "laughter",
"value": "Pinkie Pie"
},
{
"key": "loyalty",
"value": "Rainbow Dash"
}
]
這樣的話,上面的命令是不是更加好理解了。