給力的linux命令--jq簡(jiǎn)易教程

jq簡(jiǎn)介

jq可以對(duì)json數(shù)據(jù)進(jìn)行分片、過(guò)濾、映射和轉(zhuǎn)換,和sed、awk、grep等命令一樣,都可以讓你輕松地把玩文本。它能輕松地把你擁有的數(shù)據(jù)轉(zhuǎn)換成你期望的格式,而且需要寫(xiě)的程序通常也比你期望的更加簡(jiǎn)短。

jq是用C編寫(xiě),沒(méi)有運(yùn)行時(shí)依賴(lài),所以幾乎可以運(yùn)行在任何系統(tǒng)上。預(yù)編譯的二進(jìn)制文件可以直接在Linux、OS X和windows系統(tǒng)上運(yùn)行,當(dāng)然在linux和OS X系統(tǒng)你需要賦與其可執(zhí)行權(quán)限;在linux系統(tǒng)中也可以直接用yum安裝。
下載頁(yè)面:
https://stedolan.github.io/jq/download/

在知道jq命令之前,我在linux系統(tǒng)中極少直接去命令去處理json數(shù)據(jù),除非只是簡(jiǎn)單地從中過(guò)濾某個(gè)字符串,那就用grep結(jié)合正則表達(dá)式來(lái)解決。所以,掌握了jq命令,則可以讓linux命令和shell腳本在處理json數(shù)據(jù)時(shí)變得得心應(yīng)手。

jq簡(jiǎn)明教程

例子文件

為了便于演示jq的功能,我們?cè)谖募son.txt中保存如下內(nèi)容:

cat json.txt 
[{"name":"站長(zhǎng)工具","url":"http://tool.chinaz.com","address":{"city":"廈門(mén)","country":"中國(guó)"},"arrayBrowser":[{"name":"Google","url":"http://www.google.com"},{"name":"Baidu","url":"http://www.baidu.com"}]},{"name":"站長(zhǎng)之家","url":"http://tool.zzhome.com","address":{"city":"大連","country":"中國(guó)"},"arrayBrowser":[{"name":"360","url":"http://www.so.com"},{"name":"bing","url":"http://www.bing.com"}]}]

為了讓你理解文件中的內(nèi)容,對(duì)比jq的效果,在json解析工具中顯示為:

image

"."

最簡(jiǎn)單的jq程序是表達(dá)式".",它不改變輸入,但可以將其優(yōu)美地輸出,便于閱讀和理解。

cat json.txt | jq '.'

[
  {
    "name": "站長(zhǎng)工具",
    "url": "http://tool.chinaz.com",
    "address": {
      "city": "廈門(mén)",
      "country": "中國(guó)"
    },
    "arrayBrowser": [
      {
        "name": "Google",
        "url": "http://www.google.com"
      },
      {
        "name": "Baidu",
        "url": "http://www.baidu.com"
      }
    ]
  },
  {
    "name": "站長(zhǎng)之家",
    "url": "http://tool.zzhome.com",
    "address": {
      "city": "大連",
      "country": "中國(guó)"
    },
    "arrayBrowser": [
      {
        "name": "360",
        "url": "http://www.so.com"
      },
      {
        "name": "bing",
        "url": "http://www.bing.com"
      }
    ]
  }
]

[index]

輸出列表中的第一個(gè)元素,可以使用[index]:

cat json.txt | jq '.[0]'
{
  "name": "站長(zhǎng)工具",
  "url": "http://tool.chinaz.com",
  "address": {
    "city": "廈門(mén)",
    "country": "中國(guó)"
  },
  "arrayBrowser": [
    {
      "name": "Google",
      "url": "http://www.google.com"
    },
    {
      "name": "Baidu",
      "url": "http://www.baidu.com"
    }
  ]
}

管道線(xiàn)|

jq支持管道線(xiàn)|,它如同linux命令中的管道線(xiàn)——把前面命令的輸出當(dāng)作是后面命令的輸入。如下命令把.[0]作為{...}的輸入,進(jìn)而訪(fǎng)問(wèn)嵌套的屬性,如.name.address.city。

觀(guān)察如下幾個(gè)命令,通過(guò)改變|前后的輸入和輸出來(lái)達(dá)到不同的效果:

cat json.txt | jq '.[0] | {name:.name,city:.address.city}'
{
  "name": "站長(zhǎng)工具",
  "city": "廈門(mén)"
}
cat json.txt | jq '.[0] | {name:.arrayBrowser[1].name,city:.address.city}'
{
  "name": "Baidu",
  "city": "廈門(mén)"
}
cat json.txt | jq ".[] | {name:.arrayBrowser[1].name,city:.address.city}"
{
  "name": "Baidu",
  "city": "廈門(mén)"
}
{
  "name": "bing",
  "city": "大連"
}

[]

如果希望把jq的輸出當(dāng)作一個(gè)數(shù)組,可以在前后加上[]

cat json.txt | jq "[.[] | {name:.arrayBrowser[1].name,city:.address.city}]"
[
  {
    "name": "Baidu",
    "city": "廈門(mén)"
  },
  {
    "name": "bing",
    "city": "大連"
  }
]

自定義key

在{}中,冒號(hào)前面的名字是映射的名稱(chēng),你可以任意修改,如:

cat json.txt | jq "[.[] | {name_001:.arrayBrowser[1].name,city_002:.address.city}]"
[
  {
    "name_001": "Baidu",
    "city_002": "廈門(mén)"
  },
  {
    "name_001": "bing",
    "city_002": "大連"
  }
]

擴(kuò)展閱讀

http://www.json.cn/wiki.html
https://stedolan.github.io/jq/tutorial/

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

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

  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語(yǔ)言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲(chóng)de夢(mèng)閱讀 100,832評(píng)論 9 468
  • linux資料總章2.1 1.0寫(xiě)的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,353評(píng)論 2 33
  • 命令行的藝術(shù) 前言 基礎(chǔ) 日常使用 文件及數(shù)據(jù)處理 系統(tǒng)調(diào)試 單行腳本 冷門(mén)但有用 僅限 OS X 系統(tǒng) 僅限 W...
    進(jìn)擊的諾基亞閱讀 3,938評(píng)論 0 19
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評(píng)論 19 139
  • 最怨紅塵別離分,茶飯不思懶撫琴,任由繁花空自放,獨(dú)倚琴寐夢(mèng)郎君!
    未來(lái)李想閱讀 236評(píng)論 0 0

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