I have a very simple Go webserver. It's job is to receive an inbound json payload. It then publishes the payload to one or more services that expect a byte array. The payload doesn't need to be checked. Just sent over.

在本例中,它接收入站作业(job)并将其发送到Google PubSub.这可能是另一项服务-这真的无关紧要.I'm trying to find the most efficient way to convert the object to a byte array without first decoding it.

为什么?在一台服务器上解码并转换为JSON似乎有点浪费,只是在以后将其解组.另外,我不想在两个包中维护两个相同的结构.

如何转换io.ReadCloser接近字节数组,所以我只需要解组一次.我try 过这样的答案,但也不认为这是最有效的方法:

From io.Reader to string in Go

My http server code looks like this:

func Collect(d DbManager) http.HandlerFunc {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json; charset=utf-8")

    code := 422
    obj := Report{}
    response := Response{}
    response.Message = "Invalid request"

    decoder := json.NewDecoder(r.Body)
    decoder.Decode(&obj)

    if obj.Device.MachineType != "" {
        msg,_ := json.Marshal(obj)
        if d.Publish(msg, *Topic) {
          code = 200
        }
        response.Message = "Ok"
    }

    a, _ := json.Marshal(response)
    w.WriteHeader(code)
    w.Write(a)
    return
})
}

推荐答案

You convert a Reader to bytes, by reading it. There's not really a more efficient way to do it.

body, err := ioutil.ReadAll(r.Body)

If you are unconditionally transferring bytes from an io.Reader to an io.Writer, you can just use io.Copy

Json相关问答推荐

当值包含ansible中的字符串时解析json值

如何使用 jq 返回此 JSON 文件的“文本”字段?

序列化为json时如何忽略空列表?

如何在 Asp.net Core Web Api 中默认使用 Newtonsoft.Json?

使用适用于 Python 的 Google API - 我从哪里获取 client_secrets.json 文件?

如何在 Javascript 中将骆驼大小写为蛇大小写?

十六进制格式可以与 JSON 文件一起使用吗?如果是这样,怎么做?

如何为所有 API 端点全局设置 http.ResponseWriter Content-Type 标头?

如何比较 JSON 文档并返回与 Jackson 或 Gson 的差异?

使用Angular 2 的 http.get() 从本地文件加载 json

fetch() 输入意外结束

如何在notepad++ 中格式化JSON

在 bash 中将 CSV 转换为 JSON

使用 JSONEncoder 编码/解码符合协议的类型数组

Swift 中对象的自动 JSON 序列化和反序列化

如何使用jq判断数组中是否存在元素

“现代”浏览器一次可以“处理”多少个 HTML 元素?

使用 jq,将对象数组转换为具有命名键的对象

PostgreSQL 重命名 jsonb 字段中的属性

Python - 如何将 JSON 文件转换为数据框