我就廢話不多說了,大家還是直接看代碼吧~
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語(yǔ)言中 json轉(zhuǎn)換--nil
go語(yǔ)言中如果一個(gè)變量的值為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
反過來,如果一個(gè)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后,值為[]。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- golang json數(shù)組拼接的實(shí)例
- 在golang xorm中使用postgresql的json,array類型的操作
- golang中json小談之字符串轉(zhuǎn)浮點(diǎn)數(shù)的操作
- golang 實(shí)現(xiàn)json類型不確定時(shí)的轉(zhuǎn)換
- golang中json的omitempty使用操作
- 解決Golang json序列化字符串時(shí)多了\的情況
- golang中json和struct的使用說明