1. 程式人生 > >Linux Shell環境下用jq命令處理json檔案

Linux Shell環境下用jq命令處理json檔案

  1. 安裝
    CentOS下可以直接通過yum安裝:

    yum install jq -y
    
  2. 使用方法
    假設有一個名為test.json的檔案,內容如下:

    {
        "Summary": {
            "Version": "1.0",
            "Comment": [
                "List1",
                "List2"
            ]
        }
    }
    

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

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

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

    [[email protected] ~]# jq 'keys' test.json
    [
      "Summary"
    ] [[email protected] ~]# jq 'has("Summary")' test.json true [[email protected] ~]# jq 'has("nonexist")' test.json false

    在指令碼中使用jq命令
    指令碼中往往有這樣的需求:取出json檔案中的某一個元素,儲存到變數中做下一步處理。但是注意到,通過jq命令取出的字元型元素是帶引號的,例如:

    [[email protected] ~]# jq .Summary.Version test.json 
    "1.0"
    

    但是我們往往不需要這個引號,這時可以使用Shell提供的字串替換功能

    1. 使用 -r引數

      [[email protected] dbconf]# jq -r 'keys' test.json
      Summary
      
    2. 編寫指令碼example.sh進行示例:

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

      執行該指令碼可以看到,Var2被去除了引號

      [[email protected] ~]# ./example.sh 
      Var1: "1.0"
      Var2: 1.0
      

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

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

      在上述指令碼中,我們想刪除掉",那麼可以理解成將"替換成空,因此就可以用指令碼中所示的語法來處理了:
      Var2=${Var1//\"/}