一个简单的json请求返回一个奇怪的字符串,而不是json本身

时间:2019-01-03 15:26:04

标签: json go

我试图在Go中返回一个简单的json。这是一个网络应用,这是处理程序的一部分:

ConcurrentHashMap

通过curl进行请求时,会收到类似以下内容的

func JsonTest1(w http.ResponseWriter, r *http.Request) {
  test1 := "something1"
  test2 := 456
  j1 := []byte(fmt.Sprintf(`
    {
      data: {
        "test1": %s,
        "test2": %d
      }
    }
  `, test1, test2))



  j2, _ := json.Marshal(&j1)
  w.Header().Set("Content-Type", "application/json")
  w.Write(j2)
 }

为什么?该如何解决?

1 个答案:

答案 0 :(得分:2)

当您对[]byte进行JSON编码时,它将呈现为base64编码的字符串,这是表示JSON中任意字节切片/数组的最有效方法(唯一的替代方法是{{1} } 等等)。但是,在您的代码中,您正在做一些不寻常的事情,这些事情可能不是您想要的:

  • 您正在使用"field": [7, 129, 13, 48, ...]手动创建JSON形式的字符串,然后尝试对JSON进行JSON编码。 Sprintf用于获取任意的Go值并将其呈现为JSON。
  • 您手动创建的JSON无效;您有一个未引用的字符串字段值。

您想要的可能是以下选项之一:

json.Marshal