Linux Shell環境下用jq命令處理json文件

有時候需要在Shell環境下處理json文件,這時使用jq命令非常方便。

  • 安裝
    CentOS下可以直接通過yum安裝:
yum install jq -y
  • 使用方法
    假設有一個名爲test.json的文件,內容如下:
{
    "Summary": {
        "Version": "1.0",
        "Comment": [
            "List1",
            "List2"
        ]
    }
}

使用jq命令可以用描述性的語言來獲取json文件中的元素:

[root@localhost ~]# jq .Summary test.json 
{
  "Version": "1.0",
  "Comment": [
    "List1",
    "List2"
  ]
}
[root@localhost ~]# jq .Summary.Version test.json 
"1.0"
[root@localhost ~]# jq .Summary.Comment[1] test.json 
"List2"

jq命令還提供一些內建函數,比如利用keys獲取json文件中的所有key,has判斷是否存在某個key:

[root@localhost ~]# jq 'keys' test.json
[
  "Summary"
]
[root@localhost ~]# jq 'has("Summary")' test.json
true
[root@localhost ~]# jq 'has("nonexist")' test.json
false
  • 在腳本中使用jq命令
    腳本中往往有這樣的需求:取出json文件中的某一個元素,存儲到變量中做下一步處理。但是注意到,通過jq命令取出的字符型元素是帶引號的,例如:
[root@localhost ~]# jq .Summary.Version test.json 
"1.0"

但是我們往往不需要這個引號,這時可以使用Shell提供的字符串替換功能。編寫腳本example.sh進行示例:

#!/bin/bash
Var1=$(jq .Summary.Version test.json)
echo "Var1: $Var1"
Var2=${Var1//\"/}
echo "Var2: $Var2"

執行該腳本可以看到,Var2被去除了引號

[root@localhost ~]# ./example.sh 
Var1: "1.0"
Var2: 1.0

其實這是用了字符串的替換語法:

# //代表全部替換
${Str//"被替換的內容"/"替換的內容"}

在上述腳本中,我們想刪除掉",那麼可以理解成將"替換成空,因此就可以用腳本中所示的語法來處理了:

Var2=${Var1//\"/}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章