翔云

Just try, don't shy. 最新文章请点击
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

go语言中 json转换--nil

Posted on 2019-12-28 22:12  翔云123456  阅读(608)  评论(0编辑  收藏  举报

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