go语言中 json转换--nil

淺唱寂寞╮ 提交于 2020-01-24 00:59:43

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后,值为[]

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!