我是 Go 的新手,无法弄清楚如何打印出我创建的 JSON。我正在使用“encoding/json”并返回一个 []byte。然而,当我打印出来时,我得到:
cannot use json_msg (type []byte) as type string in function argument
收到此消息后,我尝试将 []byte 数组转换为字符串或空接口(interface)。但是我似乎无法让它工作。有任何想法吗?相关代码如下:
type Message struct {
Id int
Name string
}
for _, row := range rows {
m := Message{row.Int(0), row.Str(1)}
json_msg, err := json.Marshal(m)
if err == nil {
panic(err)
}//if
//tried below to print out a interface, didn't work either
//var f interface{}
//err = json.Unmarshal(json_msg, &f)
fmt.Fprintf(c.ResponseWriter, json_msg)
}//for
最佳答案
有几种方法可以获得您要查找的内容。
首先,直接回答您的问题,fmt.Fprintf
如果类型为 func(io.Writer, string, ...interface{})
。由于您将 c.ResponseWriter
传递给它,我认为这是满足 io.Writer
的东西。 fmt.Fprintf
的第二个参数是格式字符串。如果你想把一些东西打印成字符串,你可以使用 %s
格式字符串,所以你想要的是这样的:
fmt.Fprintf(c.ResponseWriter, "%s", json_msg)
这直接回答了您的问题,但让我们更进一步:这是解决您正在解决的问题的正确方法吗?不,不是真的;这样做有点奇怪。
首先,因为我们知道 fmt.Fprintf
接受 io.Writer
,所以我们讨论的是 Write([ ]字节)(整数,错误)
。您可以通过调用 ResponseWriter
上的 Write()
方法将 []byte
数据写入 ResponseWriter
直接:
_, err := c.ResponseWriter.Write(json_msg)
这稍微不那么尴尬了。事实证明,还有一种更好的方法可以做到这一点:使用 json.Encoder
。 json.Encoder
是一个嵌入 io.Writer
的结构,有效地添加到任何 io.Writer
结构一个 Encode
方法,它将结构编码为 json 并将它们写入编写器。不同之处在于,您所做的是将数据编码为内存中的 byte slice ,然后将其复制到 io.Writer
中,而您可以直接写入它,如下所示:
err := json.NewEncoder(c.ResponseWriter).Encode(m)
现在您甚至没有那种中间 []byte
格式。
关于json - 如何在 Go 中打印出 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14567324/