我很难通过网络传输 json。
Postgres 数据库中有一个 jsonb
字段,我需要将其添加到结构中,然后再将其作为 http 响应通过网络发送。
如果结构的有效负载字段是字符串
,编码转义json,如"{\"id\":\"3aa5fff0-ad91-41b1-84f0-d97f38e0e0f4\",\“用户\”:1
。
如果结构的有效负载字段是 json.RawMessage
,编码将 json 转义为(我想象的)一系列 base64 编码字节。
这是我正在编码并写入 http 响应流的结构:
类型 NestJobReturn 结构 {
状态字符串 `json:"status"`
嵌套 json.RawMessage `json:"nest"`
}
我构建了该结构的 ret
实例并将其打印出来。如果我使用 %v
它显示字节,而 %s
将它显示为正确的、未转义的 json 字符串:
日志(“ret.Nest 的值:%v”,ret.Nest)//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("内容类型", "application/json")
res.Write(js)
客户端当前收到的整个消息看起来有点像这样:
{"status":"ok","nest":"eyJpZCI6ICJmMD..."}
...但是“nest”的预期值是数据库中我的 jsonb
列中的有效 json。
有什么想法吗?
最佳答案
您需要将嵌套字段定义为指向json.RawMessage
的指针
,例如
type NestJobReturn struct {
Status string `json:"status"`
Nest *json.RawMessage `json:"nest"`
}
jsonStr := `{"type": "Object", "desc": "Simple nested object"}`
raw := json.RawMessage(jsonStr)
ret := NestJobReturn {
Status: "DONE",
Nest: &raw,
}
关于json - 如何将 jsonb 编码为 golang 中 http 响应的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39650479/