向浏览器发送“ null”而不是“ {}”

时间:2018-10-24 02:52:21

标签: go

如果要这样做,我希望能够将null作为JSON发送到浏览器:

json.NewEncoder(w).Encode(nil)

然后null将被浏览器接收。但是在这种情况下:

var nearby map[string]Nearby

// ...

func GetOne(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    item := nearby[params["id"]] // item could be nil?
    json.NewEncoder(w).Encode(item)
}

如果地图中不存在任何内容,那么浏览器会收到{}而不是null的信息...如果密钥不在,我可以通过某种方式发送null地图?

1 个答案:

答案 0 :(得分:4)

如对问题的评论中所示,映射值是一个结构。结构不能具有值nil

如果意图是在地图中没有值时写入null,则在这种情况下显式写入null

item, ok := nearby[params["id"]]
if ok {
   json.NewEncoder(w).Encode(item)
} else {
   io.WriteString(w, "null")
   // Can also use json.NewEncoder(w).Encode(nil), but that involves more machinery.
}