登录
首页 >  Golang >  Go问答

能否根据内容动态解析 json 数据?

来源:stackoverflow

时间:2024-03-01 21:27:17 489浏览 收藏

来到golang学习网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《能否根据内容动态解析 json 数据?》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我有一个如下所示的 json 格式

{
    "my_object_list": [
        {
            "meta": {"version": 1},
            "my_value": {// some complex value
            }
        }
        {
            "meta": {"version": 2},
            "my_value": {// some complex value
            }
        }
    ]
}

我希望能够在 meta 上编组每个 my_value 有没有办法在 golang 中实现这一点?

type MyResponse struct {
    // how to I unmarshal each myObject base on version?
    MyObjectList     []myObject   `json:"my_object_list"`
}

解决方案


将变化部分解组为 json.RawMessage。循环遍历数据并将原始消息数据解组为基于版本的类型。

type V1Value struct{}

type myObject struct {
    Meta struct {
        Version int `json:"version"`
    } `json:"meta"`
    RawValue json.RawMessage `json:"my_value"`
    Value    interface{} `json:"-"`
}

type MyResponse struct {
    MyObjectList []*myObject `json:"my_object_list"`
}


...

var response MyResponse
if err := json.Unmarshal(data, &response); err != nil {
     // handle error
}
for _, o := range response.MyObjectList {
    switch o.Meta.Version {
    case 1:
        var v V1Value
        if err := json.Unmarshal(o.RawValue, &v); err != nil {
            // handle error
        }
        o.Value = v
    default:
        // handle unknown version
    }
}

好了,本文到此结束,带大家了解了《能否根据内容动态解析 json 数据?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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