1. 程式人生 > >JSON 序列化和反序列化 In Go

JSON 序列化和反序列化 In Go

字段 type 反序 view bject alt 得到 對照表 基礎語

筆者之前有寫過關於 xml 的使用文章,今天來給大家介紹關於數據序列化和反序列化的一種常見方式 JSON. 尤其是在 http,rpc 的微服務調用中。

基礎語法

在 Go 中我們主要使用官方的 encoding/json 包對 json 數據進行序列化和反序列化,主要使用方法有:

  • 序列化:

技術分享圖片

  • 反序列化:

技術分享圖片

簡單的例子

技術分享圖片

當我們運行代碼的時候可以得到如下輸出結果:

技術分享圖片

在這個列子中,我們使用?unmarshal?和?marshal?將一個整數的 JSON 二進制轉化為 go?int?數據

註意:在實際應用中,我們在序列化和反序列化的時候,需要檢查函數返回的 err,如果 err 不為空,表示數據轉化失敗。

例如:我們把上面例子中 value 類型由?int?修改為?string?後再次運行代碼,你將得到?unmarshal error is:json:cannot unmarshal number into Go value of type string的錯誤提醒。

數據對應關系

JSON 和 Go 數據類型對照表

技術分享圖片

例如:

技術分享圖片

運行代碼我們可以得到如下輸出結果

技術分享圖片

自定義數據類型

除了使用上面基礎數據外,對於那些比較復雜的數據集合(Object),我們還可以使用自定義數據類型 struct 來轉化。

Go 中關於 JSON 轉化字段名的對應語法為:

技術分享圖片

如果我們想忽略那些空值的字段,我們可以使用 omitempty 選項:

技術分享圖片

如果我們想忽略特定字段:

技術分享圖片

組合示例

技術分享圖片

實戰練習

假如我們有這一樣一段 JSON 數據,它表示一個學生的考試成績,下面我們就來看看在 Go 中如何序列化和反序列化。

數據準備

技術分享圖片

反序列化

技術分享圖片

運行代碼輸出結果為:

技術分享圖片

序列化

技術分享圖片

當我們運行代碼後,打開 data2.json 文件。將看到如下內容:

技術分享圖片

Python 運維開發——18天訓練營

本課程為:網絡班+面授班(北京)

¥1999 倒計時3天

添加小助手WeChat:17812796384,回復【18天訓練營】

Golang 課程5月開課,想要學習的小夥伴抓緊時間,早報名享受早鳥價

JSON 序列化和反序列化 In Go