【发布时间】:2016-09-24 06:31:19
【问题描述】:
我很难通过网络移动 json。
在 Postgres 数据库中有一个 jsonb 字段,我需要将其添加到结构中,然后再通过网络将其作为 http 响应发送。
如果结构的有效负载字段是string,则封送处理会像"{\"id\": \"3aa5fff0-ad91-41b1-84f0-d97f38e0e0f4\", \"user\": 1 } 一样转义json。
如果结构的有效负载字段是json.RawMessage,编组会将 json 转义为(我想象的)base64 编码字节序列。
这是我正在编组并写入 http 响应流的结构:
type NestJobReturn struct {
Status string `json:"status"`
Nest json.RawMessage `json:"nest"`
}
我构建了这个结构的ret 实例并将其打印出来。如果我使用%v,它会显示字节,而%s 会将其显示为正确的、未转义的 json 字符串:
log("Value of ret.Nest: %v", ret.Nest) // Value of ret.Nest: [123 34 105 ...
log("Value of ret.Nest as a string: %s", ret.Nest) // Value of ret.Nest as a string: {"id": "f053...
编组和 i/o 就这样完成了:
js, _ := json.Marshal(ret)
res.Header().Set("Content-Type", "application/json")
res.Write(js)
客户端当前收到的整个消息看起来有点像这样:
{"status":"ok","nest":"eyJpZCI6ICJmMD..."}
...但“nest”的预期值是数据库中我的jsonb 列中的有效json。
有什么想法吗?
【问题讨论】:
-
Array and slice values encode as JSON arrays, except that []byte encodes as a base64-encoded string.json.RawMessage是 []byte 类型
标签: json postgresql go