如何在一个字段中创建nil值的地图,然后将其封送给json?

时间:2019-05-24 07:36:33

标签: go

我需要获取json字符串

{"Error": null }

我可以使用这种方法

type OKResponse struct {
    Error *int `json:"Error"`
}

encoded, err := json.Marshal(OKResponse{})
...

如何使用map获得相同的结果?还是不可能?

例如类似


jsonbody := map[string]int{"Error": nil}
encoded, err := json.Marshal(&jsonbody)
...

3 个答案:

答案 0 :(得分:3)

在这种情况下,您可以使用:

jsonbody := map[string]error{"Error": nil}

但是为了更笼统,您也可以使用:

jsonbody := map[string]interface{}{"Error": nil}

两种方法都会产生:

{"Error":null}

答案 1 :(得分:1)

由于数字无法获得nil的值,因此您无法这样做。

您可以做的是使用指针类型,然后再完成操作,例如:

package main

import (
    "fmt"
    "encoding/json"
)

func main() {
    jsonbody := map[string]*int{"Error": nil}
    encoded, _ := json.Marshal(&jsonbody)
    fmt.Printf("%s", encoded)

    num := 6
    jsonbody = map[string]*int{"Error": &num}
    encoded, _ = json.Marshal(&jsonbody)
    fmt.Printf("%s", encoded)
}

https://play.golang.org/p/TTpgr7Cy17C

答案 2 :(得分:1)

如果将类型更改为*int,它将执行您想要的操作:

type OKResponse struct {
    Error *int `json:"Error"`
}

示例:

r1 := OKResponse{}
result1, _ := json.Marshal(r1)
fmt.Printf("result1 = %s\n", string(result1))

errNo := 1
r2 := OKResponse{Error: &errNo}
result2, _ := json.Marshal(r2)
fmt.Printf("result2 = %s\n", string(result2))

输出:

result1 = {"Error":null}
result2 = {"Error":1}

in the playground看到它。