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) }
結果
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後,值為[]。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- go語言中的json與map相互轉換實現
- golang中json操作的完全指南
- golang中json小談之字符串轉浮點數的操作
- GoLang之標準庫encoding/json包
- Go語言基礎Json序列化反序列化及文件讀寫示例詳解