我需要获取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)
...
答案 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)
}
答案 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}