golang:json 反序列化的[]和nil操作
阿新 • • 發佈:2020-12-24
我就廢話不多說了,大家還是直接看程式碼吧~
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) }
結果
2019/01/07 18:13:26 {"A":null} <nil>
2019/01/07 18:13:26 {"A":[]} <nil>
補充:go語言中 json轉換--nil
go語言中如果一個變數的值為nil,是否能否為json?
如果能否轉換,轉換後的結果是什麼?
下面直接看下例子。
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
結果輸出為"null"。
也就是說,凡是值為nil的變數,經過json編碼後都是"null"。例如,未賦值的指標變數、切片slice等:
var ptr *int
var s []int
反過來,如果一個json字串是"null",經過解析後,轉換後的值是什麼樣呢?
例如,轉換為結構體,轉換後為結構體變數的預設值。
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字串,轉換為slice後,值為[]。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。