登录
首页 >  Golang >  Go问答

在一个切片中解组 2 个不同的结构

来源:Golang技术栈

时间:2023-03-09 10:19:19 397浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《在一个切片中解组 2 个不同的结构》,这篇文章主要讲到golang等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我的输入 json 数据是这样的(无法更改,来自外部资源):

[{
   "Url": "test.url",
   "Name": "testname"
},{ 
   "FormName": "Test - 2018",
   "FormNumber": 43,
   "FormSlug": "test-2018"
}]

我有两个结构将始终匹配数组中的数据:

type UrlData struct{
  "Url"  string `json:Url` 
  "Name" string `json:Name` 
}

type FormData struct{
  "FormName"  string `json:FormName` 
  "FormNumber" string `json:FormNumber` 
  "FormSlug" string `json:FormSlug`
}

显然下面的代码将不起作用,但是否可以在顶层(或其他)声明如下内容:

type ParallelData [
 urlData UrlData
 formData FormData
]

正确答案

使用两步过程进行解组。首先,解组任意 JSON 列表,然后将该列表的第一个和第二个元素解组为各自的类型。

您可以在名为 UnmarshalJSON 的方法中实现该逻辑,从而实现json.Unmarshaler 接口。这将为您提供您正在寻找的复合类型:

type ParallelData struct {
    UrlData  UrlData
    FormData FormData
}

// UnmarshalJSON implements json.Unmarshaler.
func (p *ParallelData) UnmarshalJSON(b []byte) error {
    var records []json.RawMessage
    if err := json.Unmarshal(b, &records); err != nil {
        return err
    }

    if len(records) 

在操场上试试:https: //play.golang.org/p/QMn_rbJj-P-

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

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