golang:json 反序列化的[]和nil操作
我就廢話不多說了,大家還是直接看代碼吧~
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后,值為[]。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
golang實(shí)現(xiàn)簡單的tcp數(shù)據(jù)傳輸
這篇文章主要為大家介紹了golang實(shí)現(xiàn)簡單的tcp數(shù)據(jù)傳輸,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12golang?run時報(bào)undefined錯誤的解決
這篇文章主要介紹了golang?run時報(bào)undefined錯誤的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03