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

标签 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"`
}

我该如何处理这种情况?

最佳答案

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

此外,由于 Result 是一个 slice ,它将被编码为一个 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

关于json - 想要发送空 json 字符串 "{}"而不是 "null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49611607/

相关文章:

java - Gson反序列化一个对象数组

python - Scala HTTPS post 包括 JSON 输入和输出以及身份验证

go - 在 golang 中清除 bytes.Buffer 的正确方法是什么?

go - 在Go中使用数字范围编写几种嵌套的if-else的干净方法

go - 如何组合 sha 哈希值?

android - 以 JSONObject 作为参数的 Volley JSONArrayRequest

c# - 如何在 C# 中从 URL 检索 JSON 数据

http - 在 Golang 中为 http.Response 使用空白标识符是否足以防止内存泄漏?

java - Spring Rest RequestMethod.GET 返回 400 Bad Request for @RequestParam required=true 丢失时

go - 在 Go 中将字符串转换为固定大小的字节数组