想要发送空的json字符串" {}"而不是" null"

时间:2018-04-02 12:47:23

标签: json go

我试图在我的go api中处理http请求,其中我希望发送空的json字符串,如

{"result": {}, "status": "failed"}

但是当mysql查询返回零行时,它会将输出返回为

{"result": null, "status": "failed"}

编辑:这是我使用的响应结构:

type Resp struct {
  Result []map[string]interface{} `json:"result"`
  Status string                   `json:"status"`
}

我该如何处理这种情况?

1 个答案:

答案 0 :(得分:1)

Result字段是一个切片,可以是nil。这在JSON中呈现为null。要使其不是nil,您必须对其进行初始化。

此外,由于Result是一个切片,因此它将被编组为JSON数组([]),而不是JSON对象({})。

示例:

package main

import (
  "encoding/json"
  "fmt"
  "log"
  "os"
)

type Resp struct {
  Result []map[string]interface{} `json:"result"`
  Status string                   `json:"status"`
}

func main() {
  enc := json.NewEncoder(os.Stdout)

  fmt.Println("Empty Resp struct:")
  if err := enc.Encode(Resp{}); err != nil {
    log.Fatal(err)
  }

  fmt.Println()

  fmt.Println("Initialised Result field:")
  if err := enc.Encode(Resp{Result: []map[string]interface{}{}}); err != nil {
    log.Fatal(err)
  }

}

输出:

Empty Resp struct:
{"result":null,"status":""}

Initialised Result field:
{"result":[],"status":""}

https://play.golang.org/p/9zmfH-180Zk