linux下json解析神器----jq

前言

在linux環(huán)境中,使用curl命令孵睬,調(diào)用單個(gè)接口,返回的數(shù)據(jù)通常都是一大坨伶跷,看起來(lái)很不方便掰读。
如圖:


curl.png

如果我們只需要其中的一部分?jǐn)?shù)據(jù),name在這么一大坨中尋找叭莫,還是比較吃力的蹈集。
一般遇到這種情況,可以把response拷貝下來(lái)雇初,利用工具拢肆,格式化JSON。


Json.png

介紹一款神器靖诗,直接在linux中格式化JSON

JSON解析神器----jq

1.jq簡(jiǎn)介

首先看下一段摘抄自網(wǎng)上的介紹

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

jq的官方地址 :jq

2.示例

2.1 .

這應(yīng)該是最簡(jiǎn)單的篩選攒庵,只是簡(jiǎn)單的將結(jié)果格式化

The absolute simplest filter is . . This is a filter that takes its input and produces it unchanged as output. That is, this is the identity operator.
Since jq by default pretty-prints all output, this trivial program can be a useful way of formatting JSON output from, say, curl.

curl -s  -X POST -d '"uid":"125778302"}' http://localhost/lock_screen | jq .


{
  "code": 0,
  "err_string": "",
  "user_id": "125778302",
  "docs": [
    10032243,
    10032242,
    10032240,
    10032239,
    10032231,
    10032230,
    10032217,
    10032212
  ],
  "props": "{\"10032212\":{\"from\":1036},\"10032217\":{\"from\":1036},\"10032230\":{\"from\":1036},\"10032231\":{\"from\":1036},\"10032239\":{\"from\":1036},\"10032240\":{\"from\":1036},\"10032242\":{\"from\":1036},\"10032243\":{\"from\":1036}}",
  "request_id": "1537520169462932797678"
}

為了不涉密,把請(qǐng)求中的參數(shù)都抹去了败晴,可以看出浓冒,響應(yīng)已經(jīng)完成了格式化

2 過(guò)濾 .foo

如果我們想只看docs這個(gè)列表,不需要看其他信息尖坤,那應(yīng)該怎么做裆蒸?
只需要在.后面加上 對(duì)應(yīng)的key值

curl -s  -X POST -d '"uid":"125778302"}' http://localhost/lock_screen | jq .docs

[
  10032243,
  10032242,
  10032240,
  10032239,
  10032231,
  10032230,
  10032217,
  10032212
]
3.切片 .foo[index]

jq同樣也支持切片

curl -s  -X POST -d '"uid":"125778302"}' http://localhost/lock_screen | jq .docs[1]

10032242

curl -s  -X POST -d '"uid":"125778302"}' http://localhost/lock_screen | jq .docs[1:4]

[
  10032242,
  10032240,
  10032239
]

4. .foo[]與.foo[]?與.foo的區(qū)別

對(duì)于docs來(lái)說(shuō),它的value是一個(gè)列表

  • .docs 輸出的是一個(gè)整體
curl -s  -X POST -d '"uid":"125778302"}' http://localhost/lock_screen | jq .docs

[
  10032243,
  10032242,
  10032240,
  10032239,
  10032231,
  10032230,
  10032217,
  10032212
]
  • .docs[]輸出的8個(gè)數(shù)字糖驴,而不是一個(gè)整體
curl -s  -X POST -d '"uid":"125778302"}' http://localhost/lock_screen | jq .docs[]

10032243
10032242
10032240
10032239
10032231
10032230
10032217
10032212

If you use the .[index] syntax, but omit the index entirely, it will return all of the elements of an array. Running .[] with the input [1,2,3] will produce the numbers as three separate results, rather than as a single array.
You can also use this on an object, and it will return all the values of the object.

  • .[]與.[]?的區(qū)別
    官網(wǎng)文檔中有這么一句話

Like .[], but no errors will be output if . is not an array or object.

即: []會(huì)有報(bào)錯(cuò)僚祷,[]佛致?沒(méi)有報(bào)錯(cuò)
實(shí)踐一下:
props的value是一個(gè)字符串

curl -s  -X POST -d '"uid":"125778302"}' http://localhost/lock_screen | jq .props[]

jq: error (at <stdin>:0): Cannot iterate over string ("{\"1003221...)

curl -s  -X POST -d '"uid":"125778302"}' http://localhost/lock_screen | jq .props[]?
沒(méi)有任何輸出
5.輸出多個(gè)參數(shù),

用,隔離需要輸出的參數(shù)

curl -s  -X POST -d '"uid":"125778302"}' http://localhost/lock_screen | jq .docs,.user_id

[
  10032243,
  10032242,
  10032240,
  10032239,
  10032231,
  10032230,
  10032217,
  10032212
]
"125778302"
6.自定義key

由上可知,雖然輸出了value但是key值丟失了辙谜,如果想要輸出key怎么辦俺榆?

url xxxxxxx   jq '.|{dddd:.docs ,uuuu: .user_id}'

{
  "dddd": [
    10032217,
    10032232,
    10032240,
    10032219,
    10032228,
    10032230,
    10032234,
    10032231,
    10032220,
    10032243
  ],
  "uuuu": "125778302"
}
更多用法,參照官網(wǎng)wiki文檔
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末装哆,一起剝皮案震驚了整個(gè)濱河市罐脊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜕琴,老刑警劉巖萍桌,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異凌简,居然都是意外死亡上炎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)雏搂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)藕施,“玉大人,你說(shuō)我怎么就攤上這事凸郑∩咽常” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵芙沥,是天一觀的道長(zhǎng)诲祸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)而昨,這世上最難降的妖魔是什么烦绳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮配紫,結(jié)果婚禮上径密,老公的妹妹穿的比我還像新娘。我一直安慰自己躺孝,他們只是感情好享扔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著植袍,像睡著了一般惧眠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上于个,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天氛魁,我揣著相機(jī)與錄音,去河邊找鬼。 笑死秀存,一個(gè)胖子當(dāng)著我的面吹牛捶码,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播或链,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼惫恼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了澳盐?” 一聲冷哼從身側(cè)響起祈纯,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叼耙,沒(méi)想到半個(gè)月后腕窥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筛婉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年簇爆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倾贰。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拦惋,靈堂內(nèi)的尸體忽然破棺而出匆浙,到底是詐尸還是另有隱情,我是刑警寧澤厕妖,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布首尼,位于F島的核電站,受9級(jí)特大地震影響言秸,放射性物質(zhì)發(fā)生泄漏软能。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一举畸、第九天 我趴在偏房一處隱蔽的房頂上張望查排。 院中可真熱鬧,春花似錦抄沮、人聲如沸跋核。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)砂代。三九已至,卻和暖如春率挣,著一層夾襖步出監(jiān)牢的瞬間刻伊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捶箱,地道東北人智什。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像讼呢,于是被迫代替她去往敵國(guó)和親撩鹿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理悦屏,服務(wù)發(fā)現(xiàn)节沦,斷路器,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類(lèi): pyspark.sql...
    mpro閱讀 9,451評(píng)論 0 13
  • Overview The ccxt library is a collection of available cr...
    郭蟈兒蟈兒閱讀 3,713評(píng)論 0 1
  • Getting Started Use the Current Stable Version (7.1) Buil...
    Leonzai閱讀 1,946評(píng)論 0 3
  • 1.需求分析:明確系統(tǒng)功能础爬;進(jìn)行可行性分析甫贯。 2.總體設(shè)計(jì):出軟件總體結(jié)構(gòu)圖并進(jìn)行功能模塊劃分。 3.概要設(shè)計(jì):對(duì)...
    冷面水手閱讀 247評(píng)論 0 1