json - 如何在 Go 中打印出 JSON

标签 json go

我是 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.Encoderjson.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/

相关文章:

database - 使用 channel 进行并发数据库调用是好的设计吗?

android - Android 上的 AWS DynamoDB : Inserting JSON Directly?

mysql - 包含属性的Upsert已更新

go - 具有多个模块的 mono-repos 中是否有 Go 模块名称的约定?

java - jersey-media-json-jackson 未包含在 jar 中

mongodb - Golang MongoDB (mgo) 查找反射报错

reactjs - 为 React、Angular 等使用 HTTP 服务器

javascript - 将 JSON 对象的部分内容替换为 HTML 输入值

php - 错误缺失;通过jquery发送序列化xml时jquery中的before语句

jquery - 将 JQuery getJSON 与包含的其他 JavaScript 一起使用会出现 ReferenceError