gpt4 book ai didi

json - 如何将 jsonb 编码为 golang 中 http 响应的一部分

转载 作者:IT王子 更新时间:2023-10-29 02:03:59 25 4
gpt4 key购买 nike

我很难通过网络传输 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,
}

一个工作示例 https://play.golang.org/p/Ju7kgbawss

关于json - 如何将 jsonb 编码为 golang 中 http 响应的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39650479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com