你最喜歡用的JSON解析庫有哪些?

時間 2021-05-30 03:41:55

1樓:程式設計師良許

我這邊分享乙個不用程式設計即可解析JSON資料報的方式。

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

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

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

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

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

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

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

各平台的安裝方法如下:

Arch Linux 平台:

sudo pacman -S jq

Debian, Ubuntu, Linux Mint 平台:

sudo apt-get install jq

Fedora:

sudo dnf install jq

OpenSUSE:

sudo zypper install j

對於其它平台的安裝,需要查詢一下他們的官方安裝指導手冊。

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

,"phoneNumber":[,],"gender":}

看起來很暈是吧?也不方便閱讀是吧?

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

cat liangxu.json | jq '.'

輸出結果:

, "phoneNumber൪type": "home",

"number": "020 555-1234൪type": "company",

"number": "020 555-4567൪gender":

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

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

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

jq .address liangxu.json

輸出結果:

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

cat liangxu.json | jq .address.postalCode

輸出結果:

"510655"

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

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

jq .phoneNumber liangxu.json

輸出結果:

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

jq .phoneNumber[0] liangxu.json

輸出結果:

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

keys

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

cat liangxu.json | jq 'keys'

輸出結果:

[ "address",

"age",

"firstName",

"gender",

"lastName",

"phoneNumber"

]has

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

cat liangxu.json | jq 'has("alvin")'

輸出結果:

false

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

2樓:

C++物件Json序列化最佳實踐(基於Rapidjson庫):C++記憶體物件和Json字串互相轉換 https://

blog.csdn.net/calmreaso

n/article/details/79973093

3樓:

題目標註有Android……那俺就說說自己的一點點使用經驗。

開始專案中使用的是fastjson,而且作者也說比gson快6倍,甚至嘲諷gson的g代表了「龜速」的意思,可是我自己的簡單測試是,比較簡陋的測試,乙個10萬條資料的json檔案,gson比fastjson快一些,快了大概80%的樣子。雖然測試可能不科學,但資料確實是我們專案中的實際資料,所以……

另外,也許是我使用真的有問題?使用的新版本的fastjson效能反而比舊的要低很多(1.2.

7,1.1.44-android,1.

1.33-android裡面,1.1.

33反而是最快的)。

然而,最終我選擇了logan square,它的速度比fastjson快了2-3倍(自測),嗯,推薦Android開發者們使用Logan Square。

你有哪首最喜歡的歌可以推薦?

王小義 獨家記憶。有的人說這首歌確實很適合在失戀的時候聽的,能夠安慰受傷的心,也能夠在歌曲當中獲得一些感悟,有很多人都稱這首歌曲是男生的療傷之作。在剛開始聽到這個旋律響起的時候,就被帶入到了歌曲的意境當中,給人滿滿的回憶感。不管這首歌背後的創作故事到底是什麼樣的,這首歌曲的創作都是很成功的,成為了年...

你最喜歡伍佰的哪首歌?

樹風 房間內的燈我都不開你又不在 只有那聲音直嗡嗡 不應該的念頭一直出現 不能理解所有過程太匆匆 靜止而承受混亂是我思緒 半空中在下雨下在黑暗大地將要反擊 滿滿的寂寞溢位的是解脫 不該是沉默出現在這風口 穿過樹的風像手般的撫弄 情慾在心口濃烈的愛 奔跑樹林中答案會是什麼 離開或留下枝葉間的掙扎 穿過...

你最喜歡李宗盛的哪首歌?

對自己好點 你們 這是李宗盛寫給他歌迷的歌,去看過一次他的演唱會,結束觀眾退場時放的是這首歌每次聽都感動想哭 漂洋過海來看你 在漫天風沙裡望著你遠去我竟悲傷不已,多盼能送君千里一生和你相依 晚婚 我在等世上唯一契合靈魂 不只在乎我是誰 女人若沒人愛多可悲 山丘 你興高采烈的開啟手機,卻發現一條資訊都...