如何在Go中打印出JSON

use*_*049 4 json go

我是Go的新手,无法弄清楚如何打印出我创建的JSON.我正在使用"encoding/json"并且返回了一个[]字节.然而,当我打印出来时,我得到:

cannot use json_msg (type []byte) as type string in function argument
Run Code Online (Sandbox Code Playgroud)

收到此消息后,我试图将[]字节数组转换为字符串或空接口.但是我似乎无法让它发挥作用.有任何想法吗?相关代码如下:

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
Run Code Online (Sandbox Code Playgroud)

jor*_*lli 12

有一些方法可以满足您的需求.

首先,直接回答你的问题,fmt.Fprintf如果是类型func(io.Writer, string, ...interface{}).既然你已经c.ResponseWriter进入它,我认为这是满足的io.Writer.第二个参数fmt.Fprintf是格式字符串.如果你想打印一些字符串,你可以使用%s格式字符串,所以你想要的是:

fmt.Fprintf(c.ResponseWriter, "%s", json_msg)
Run Code Online (Sandbox Code Playgroud)

直接回答你的问题,但让我们更进一步:是解决你正在解决的问题的正确方法吗?不,不是真的; 这样做有点奇怪.

首先,因为我们知道fmt.Fprintf接受io.Writer,我们正在谈论一种形式的方法Write([]byte) (int, error).你可以通过直接调用方法将[]byte数据写入:ResponseWriterWrite()ResponseWriter

_, err := c.ResponseWriter.Write(json_msg)
Run Code Online (Sandbox Code Playgroud)

有点尴尬.事实证明,有一种更好的方法可以做到这一点:使用a json.Encoder.阿json.Encoder是一个结构嵌入io.Writer,从而有效地增加了任何io.Writer结构的Encode方法,该方法将编码结构为JSON,并将其写入到写入.不同之处在于,您所做的是将数据编码到内存中的字节片,然后将其复制到一个io.Writer,当您可以直接写入时,如下所示:

err := json.NewEncoder(c.ResponseWriter).Encode(m)
Run Code Online (Sandbox Code Playgroud)

现在你甚至没有那种中间[]byte格式.