教你不程式設計快速解析 JSON 資料

2021-09-19 22:59:33 字數 2661 閱讀 5283

json 是一種輕量級的,不受語言約束的資料儲存格式,大部分程式語言都可以解析它,並且對程式設計人員也十分友好。我們在進行通訊/資料互動時,非常經常用到 json 格式。

但是,我們在進行資料儲存的時候,json 格式是以一行的資料進行儲存,閱讀起來的話也會有些困難。所以,為了更加便於閱讀,我們可以採用一些方法對 json 資料進行格式化。

在各種程式語言裡,都會有一些相應的庫為我們解析 json 資料,比如 c 語言裡有 cjson ,python 裡有 json.tool ,等等。

那在 linux 平台下,有沒有一些工具可以不用程式設計,直接來格式化/解析 json 資料呢?

答案當然是肯定的,這個工具就是jq

jq 是一款命令列下處理 json 資料的工具。其可以接受標準輸入,命令管道或者檔案中的 json 資料,經過一系列的過濾器(filters)和表示式的轉化後形成我們需要的資料結構並將結果輸出到標準輸出中。jq 的這種特性使我們可以很容易地在 shell 指令碼中呼叫它。

jq 工具的安裝

有些發行版已經內建了 jq 這個工具,但有些還沒有。如果沒有內建這個工具的話,就需要我們手動安裝了。

各平台的安裝方法如下:

sudo pacman -s jq
sudo apt-get install jq
sudo dnf install jq
sudo zypper install jq
對於其它平台的安裝,需要查詢一下他們的官方安裝指導手冊。

使用 jq 工具格式化 json 資料

比如我們現在有以下 json 資料:

,"phonenumber":[,],"gender":}
看起來很暈是吧?也不方便閱讀是吧?

我們先將這個檔案儲存為 liangxu.json 檔案,然後再用 jq 工具格式化一下,使它更便於我們閱讀:

cat liangxu.json | jq '.'
輸出結果:

,

"phonenumber": [,],

"gender": 

}

'.' 是 jq 工具的最簡單表示式,它不改變輸入,但可以將其優美地輸出,便於閱讀和理解。

在以下的案例中,我們均以此資料作為解析物件。

使用 jq 工具解析特定字段

在以上那個示例 json 資料中,假如我們想要解析出 address 這個字段,我們可以這樣使用 jq 工具:

jq .address liangxu.json
輸出結果:

接下來,我們來進一步解析位址中的郵編,我們配合管道來進行。

cat liangxu.json | jq .address.postalcode
輸出結果:

"510655"
請注意,使用 jq 命令時,過濾器是大小寫敏感的,所以你在解析欄位時,必須嚴格跟原欄位一樣,否則就無法進行解析。

使用 jq 工具解析中陣列中的元素

在 json 資料中,陣列是以方括號括起來的一組元素。如果要解析陣列中的元素,我們就需要用到陣列裡的下標。

jq .phonenumber liangxu.json
輸出結果:

如果我們要過濾出陣列裡的第乙個元素,我們可以加上下標 [0] :

jq .phonenumber[0] liangxu.json
輸出結果:

jq 工具的內建函式

jq 工具為我們提供了很多內建函式,這裡介紹其中的兩個:keyshas

keys 是用來獲取 json 中的 key 元素的,查詢 json 資料中所有的鍵。

cat liangxu.json | jq 'keys'
輸出結果:

[

"address",

"age",

"firstname",

"gender",

"lastname",

"phonenumber"

]

has 是用來是 json 資料中判斷是否存在某個 key,它的輸出結果是 true 或 false 。

cat liangxu.json | jq 'has("alvin")'
輸出結果:

false
小結

以上所介紹的是 jq 工具很基本的用法,jq 不僅能夠滿足一般性的常見需求,更包含運算、內建函式、條件比較、 變數宣告、自定函式等強大功能。對此感興趣的朋友,不妨通過 jq 的官方手冊 進行學習。

json快速解析

寫專案經常會用到 json 解析 為了方便自己 也方便大家 我寫個demo 出來 依賴 谷歌 com.google.code.gson gson 2.8.0 string str 你的json字串 jsonobject json jsonobject parse.parse str 獲取外層的狀態碼...

網路程式設計 json資料的解析

張三name 20age 北京city 長安街street adress person public static void main string args 解析string裡的json資料並返回乙個person物件 public static person parsejson string js...

json快速入門(cjson解析)

json是儲存和交換文字資訊的語法,與xml類似。json有兩種結構,分別是陣列和物件 json解析環境 cjson是乙個超輕巧,攜帶方便,單檔案,簡單的可以作為ansi c標準的json解析器,cjson庫包括cjson.h和cjson.c兩個檔案,放入指定目錄直接呼叫就可以了。1.有一對基本的 ...