Linux中在命令行中使用JQ來解析修改JSON字符串

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

  1. 查找所需要的屬性(查詢)

通過命令行,我們首先使用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ù)只要按照這個寫法就好了

  1. 修改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"
      }
    ]

這樣的話,上面的命令是不是更加好理解了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 基礎(chǔ) 1. 學(xué)習(xí)基礎(chǔ)的bash用法,具體地說,閱讀bash的man手冊(man bash 并通讀一遍);很簡...
    Leon_Geo閱讀 1,174評論 1 19
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,345評論 2 33
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,286評論 6 342
  • 命令行的藝術(shù) 前言 基礎(chǔ) 日常使用 文件及數(shù)據(jù)處理 系統(tǒng)調(diào)試 單行腳本 冷門但有用 僅限 OS X 系統(tǒng) 僅限 W...
    進(jìn)擊的諾基亞閱讀 3,935評論 0 19

友情鏈接更多精彩內(nèi)容