Linux命令之jq命令處理JSON數(shù)據(jù)方式
一、jq簡介
jq是一個出色的命令行針對JSON的處理器,提供了用于查詢、操作和使用JSON文件的大量功能,且作為一個命令行工具,可配合管道使用腳本處理JSON
jq可以對json數(shù)據(jù)進(jìn)行分片、過濾、映射、轉(zhuǎn)換和sed、awk、grep等命令一樣,可以輕松地把玩文本
jq是用C編寫,沒有運(yùn)行時依賴,所以可以運(yùn)行在任何系統(tǒng)上
二、安裝jq命令
# yum -y install jq
三、jq命令詳解
jq [options] filter [files]
options
--version:輸出jq的版本信息 --slurp/-s:讀入整個輸入流到一個數(shù)組 --raw-input/-R:不作為JSON解析,將每一行的文本作為字符串輸出到屏幕 --null-input/-n:不讀取任何輸入,過濾器運(yùn)行使用null作為輸入,一般用作從頭構(gòu)建JSON數(shù)據(jù) --compact-output/-c:使輸出緊湊,而不是把每一個JSON對象輸出在一行 --colour-output/-C:打開顏色顯示 --monochrome-output/-M:關(guān)閉顏色顯示 --ascii-output/-a:指定輸出格式為ASCII -raw-output/-r:如果過濾的結(jié)果是一個字符串,那么直接寫到標(biāo)準(zhǔn)輸出(去掉字符串的引號)
filter
.:默認(rèn)輸出 .foo:輸出指定屬性,foo代表屬性 .[foo]:輸出指定數(shù)組元素,foo代表數(shù)組下標(biāo) .[]:輸出指定數(shù)組中全部元素 ,:指定多個屬性作為過濾條件時用逗號分隔 |:將指定的數(shù)組元素中的某個屬性作為過濾條件
files
JOSN格式文件
JSON數(shù)據(jù)類型
數(shù)據(jù)結(jié)構(gòu):object–>‘{}’、array–>‘[]’
基本類型:string、number、true、false、null -->6種
后續(xù):null和空串的區(qū)別
一個花括號{}代表一個對象–>‘object’
特點(diǎn):里面的元素必須是’key:value’以’,'隔開
補(bǔ)充:對象是一個無序的’key/value’集合
一個方括號[]代表一個數(shù)組–>‘array’
特點(diǎn):數(shù)組是值’的有序集合,值之間以’,'分割
補(bǔ)充:值可以是"雙引號"包括的string、number、true、false、null、object、arrary
理解:‘value’是廣義上的單個元素,可以通過{}、’[]'嵌套來實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)
json僅支持’UTF-8’編碼且不支持注釋
JSON基礎(chǔ)
- key:一般是’string’類型,用"雙引號"
- 強(qiáng)調(diào):不是單引號
- 補(bǔ)充:雙引號包括的字符串能解析"\t、\n"等符號
- value:任何基本類型或數(shù)據(jù)結(jié)構(gòu)
- 細(xì)節(jié):最后一個不要加逗號加了會出錯
例:

如果只想訪問單個屬性并將其打印輸出,可以使用.字段運(yùn)算符
例如要訪問工人的屬性可以使用以下命令

使用.字段運(yùn)算符訪問屬性中存在的項(xiàng)目

使用.[ ]運(yùn)算符訪問和輸出JSON文件中數(shù)組中存在的元素

使用下標(biāo)索引定位輸出特定的數(shù)組

使用.字段運(yùn)算符訪問數(shù)組中存在的屬性,例如訪問第三個數(shù)組中的name屬性

訪問數(shù)組中所有名稱屬性

使用-s把輸入流數(shù)據(jù)放到一個數(shù)組[ ]內(nèi)


使用-r將輸出結(jié)果去掉雙引號

數(shù)據(jù)重組成數(shù)組

數(shù)據(jù)重組成對象

管道過濾重組成新對象

篩選

計(jì)算

數(shù)組中每個鍵進(jìn)行映射并做數(shù)值計(jì)算加2

刪除json鍵
jq支持從JSON對象中刪除鍵,刪除后輸出就不包含刪除key的JSON對象。刪除鍵使用del()函數(shù)

函數(shù)length
- 數(shù)字:返回?cái)?shù)字值
- 字符串:返回字符串長度
- 數(shù)組:返回?cái)?shù)組長度
- map:返回元素個數(shù)

總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
嵌入式Linux開發(fā)環(huán)境搭建ping、nfs的解決方法
在本篇文章里小編給大家整理了關(guān)于嵌入式Linux開發(fā)環(huán)境搭建ping、nfs的解決方法,需要的朋友們學(xué)習(xí)參考下。2019-07-07

