您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)如何在golang中對json進(jìn)行反序列化,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
package main import ( "encoding/json" "log" ) type JS struct { A []string } func main() { v1 := &JS{} v2 := &JS{A: []string{}} o1, err := json.Marshal(&v1) log.Println(string(o1), err) o2, err2 := json.Marshal(&v2) log.Println(string(o2), err2) }
結(jié)果
2019/01/07 18:13:26 {"A":null} <nil>
2019/01/07 18:13:26 {"A":[]} <nil>
補(bǔ)充:go語言中 json轉(zhuǎn)換--nil
go語言中如果一個變量的值為nil,是否能否為json?
如果能否轉(zhuǎn)換,轉(zhuǎn)換后的結(jié)果是什么?
下面直接看下例子。
package main import ( "encoding/json" "fmt" ) func main() { marshalTest() } func marshalTest() { b, err := json.Marshal(nil) if err != nil { fmt.Println("json.Marshal failed:", err) return } fmt.Println("result:", string(b)) }
output:
result: null
結(jié)果輸出為"null"。
也就是說,凡是值為nil的變量,經(jīng)過json編碼后都是"null"。例如,未賦值的指針變量、切片slice等:
var ptr *int
var s []int
反過來,如果一個json字符串是"null",經(jīng)過解析后,轉(zhuǎn)換后的值是什么樣呢?
例如,轉(zhuǎn)換為結(jié)構(gòu)體,轉(zhuǎn)換后為結(jié)構(gòu)體變量的默認(rèn)值。
package main import ( "encoding/json" "fmt" ) func main() { unmarshalTest() } type Apple struct { Size int Addr string Num *int } func unmarshalTest() { value := []byte("null") a := Apple{} if err := json.Unmarshal(value, &a); err != nil { fmt.Println("json.Unmarshal failed:", err) return } fmt.Printf("result:%+v\n", a) }
output:
result:{Size:0 Addr: Num:<nil>}
如果"null"作為json字符串,轉(zhuǎn)換為slice后,值為[]。
以上就是如何在golang中對json進(jìn)行反序列化,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。