登录
首页 >  Golang >  Go问答

Go 中的通用 JSON 和 BSON 编组/解组方法有哪些适用于两种不同的格式?

来源:stackoverflow

时间:2024-02-16 13:12:25 124浏览 收藏

今天golang学习网给大家带来了《Go 中的通用 JSON 和 BSON 编组/解组方法有哪些适用于两种不同的格式?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我目前在集合中以两种形式存储 mongo 数据(特别是内容键)。部分样本数据如下:

格式 1。

{
    "type": "text",
    "content": "foobar",
    "extratextdata": "hello text"
}

格式 2

{
    "type": "group",
    "content": [
        {
            "type": "text",
            "content": "grouped-foobar"
        },
        {
            "type": "image",
            "url": "https://abc.jpg"
        },
    ],
    "extragroupdata": "hello group"
}

我尝试在 golang 中构造这个结构如下。

type C struct {
    Type string `json:"type" bson:"type"`
    Content ???
    *TextC 
    *GroupC
}
type TextC struct {
    ExtraTextData `json:"extraTextData" bson:"extraTextData"`
}
type GroupC struct {
    ExtraGroupData `json:"extraGroupData" bson:"extraGroupData"`
}

我在如何设置适用于 textc 和 groupc 格式的“内容”字段结构方面遇到问题。

groupc 的内容可以是 c 数组,例如 - content []c textc的内容也可以是字符串类型。

有人可以帮忙并举例说明如何解决这种情况吗?


正确答案


format2 json 无效。您可以在这里查看:https://jsonlint.com/

我已经为您的案例创建了一个示例场景。

您可以在这里尝试:https://go.dev/play/p/jaUE3rjI-Ik

像这样使用 interface{}

type autogenerated struct {
        type           string      `json:"type"`
        content        interface{} `json:"content"`
        extratextdata  string      `json:"extratextdata,omitempty"`
        extragroupdata string      `json:"extragroupdata,omitempty"`
    }

您还应该从 format2 中删除 comma

{
    "type": "group",
    "content": [
        {
            "type": "text",
            "content": "grouped-foobar"
        },
        {
            "type": "image",
            "url": "https://abc.jpg"
        }
    ],
    "extragroupdata": "hello group"
}

如果您不删除 comma 那么它将出现如下错误:

invalid character ']' looking for beginning of value

到这里,我们也就讲完了《Go 中的通用 JSON 和 BSON 编组/解组方法有哪些适用于两种不同的格式?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>