json資料的序列化與反序列化
導讀 | json的全名是Javascript object notation, 中文全名:js物件表示法。在序列化和反序列化的協議中,有:json、xml、yaml、protocol buffer等。其中json是前後端API契約資料的主要傳輸形式。 json支援數值、布林值、陣列和物件四種資料類型。透過這四種資料類型,可以建立複雜的資料模型。 |
在Go語言中,我們可以使用json標準函式庫來實現資料的序列化和反序列化。這個函式庫提供了方便的方法來序列化和反序列化map、結構體、陣列、切片和內建的基本資料類型。透過使用json標準函式庫,我們可以輕鬆地將資料轉換為json格式,並在需要時將其解析回原始資料類型。這為我們處理數據提供了很大的便利性。
在這裡,我將舉出三個例子來說明json的使用方法。對於初學者來說,可能經常只使用一種結構體物件來接收和發送資料。下面我們就來看看具體的例子。 1. 使用結構體物件接收資料: ``` type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { data := `{"name": "Alice", "age": 25}` var p Person err := json.Unmarshal([]byte(data), &p) if err != nil { fmt.Println("解析json失敗:", err) return
type Person struct {<br>
Name string `json:"name"`<br>#
Age int `json:"age"`<br>#
}
<br>
func main() {<br>
var (<br>
newPer Person<br>
bts []byte<br>
)<br>
per:=Person{<br>
Name: "Lily",<br>
Age: 29,<br>
}<br>
// 序列化<br>
if bts, err = json.Marshal(per); err !=nil{<br>
log.Fatal(err.Error())<br>
return<br>
}
<br>
if err = json.Unmarshal(bts, &newPer); err !=nil{<br>#
log.Fatal(err.Error())<br>
return<br>
}<br>
fmt.Println(newPer)<br>
}
func main() {<br>
var (<br>
smap = map[string]int{<br>#
"Age": 28,<br>
"Sex": 1,<br>
"Floor": 12,<br>
}<br>
newSmap = make(map[string]int)<br>
bts []byte<br>
)<br>
if bts, err = json.Marshal(smap); err !=nil {<br>
log.Fatal(err.Error())<br>
return<br>
}<br>
if err = json.Umarshal(bts, &newSmap); err !=nil {<br>
log.Fatal(err.Error())<br>
return<br>
}<br>
fmt.Println(newSmap)<br>
}
func main() {<br>
var (<br>
ages []int = []int{23, 20, 28, 25, 30}<br>
bts []byte<br>
err error<br>
newAges = make([]int, len(ages))<br>
)<br>
if bts, err = json.Marshal(ages); err != nil {<br>
fmt.Println(err.Error())<br>
return<br>
}<br>
if err = json.Unmarshal(bts, &newAges); err != nil {<br>
fmt.Println(err.Error())<br>
return<br>
}<br>
fmt.Println("new ages: ", newAges)<br>
return<br>
}
初學者對結構體的json序列化和反序列化比較清楚,對後兩種可能很少用,也不會用。
- 對於數組類型數據,但是有些業務場景前端會使用。
- 對於map類型,一般會在Go語言的服務端呼叫第三方REST介面時,服務端只想要指定的回傳碼,判斷是否呼叫成功時。程式猿不想寫整體的struct結構體定義,也可能是比較懶,然後用了一個map[string]interface{}去接收回傳資料。這時候透過json標準函式庫中的Unmarshal反序列化後,然後透過map["err_code"].(int)取得回傳碼,然後再做其他後續處理邏輯。
這裡還要說明一個結構體時,有時候我會用到的特性,結構體的json支援的標籤值特性omitempty,例如:
type Person struct {<br>
Name string `json:"name,omitempty"`<br>
Age int `json:"age"`<br>#
}<br>
它表示,當函數omitempty的標籤值時,它所對應的結構體的資料元素值如果是零值,則它不會輸出。那就是說如果服務端回傳的結構體資料中的某個元素為空時,不回傳給前端這個元素,就可以使用omitempty的json標籤值屬性。
在這裡提供大家一個滴滴公司的一位高級工程師taowen寫的json解析庫,世界上最快的。 github位址:jsoniter。
- OpenFermion 的詳細介紹:點選查看
- OpenFermion 的下載位址:點選下載
以上是json資料的序列化與反序列化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

VS Code 一步/下一步快捷鍵的使用方法:一步(向後):Windows/Linux:Ctrl ←;macOS:Cmd ←下一步(向前):Windows/Linux:Ctrl →;macOS:Cmd →

在 Sublime 中運行代碼的方法有六種:通過熱鍵、菜單、構建系統、命令行、設置默認構建系統和自定義構建命令,並可通過右鍵單擊項目/文件運行單個文件/項目,構建系統可用性取決於 Sublime Text 的安裝情況。

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

要安裝 Laravel,需依序進行以下步驟:安裝 Composer(適用於 macOS/Linux 和 Windows)安裝 Laravel 安裝器創建新項目啟動服務訪問應用程序(網址:http://127.0.0.1:8000)設置數據庫連接(如果需要)
