当前位置: 首页 > 面试题库 >

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

华衡
2023-03-14
问题内容

我输入的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) < 2 {
        return errors.New("short JSON array")
    }

    if err := json.Unmarshal(records[0], &p.UrlData); err != nil {
        return err
    }

    if err := json.Unmarshal(records[1], &p.FormData); err != nil {
        return err
    }

    return nil
}

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



 类似资料:
  • 我试图解决这个问题。 给出了一个整数M和一个由N个非负整数组成的非空零索引数组A。数组A中的所有整数都小于或等于M。 一对整数(P,Q),使得0≤ P≤ Q 例如,考虑整数M=6和数组A,这样: 正好有九个不同的切片:(0, 0), (0, 1), (0, 2), (1, 1), (1,2), (2, 2), (3, 3), (3, 4)和(4,4)。 目标是计算不同切片的数量。 提前感谢。

  • 我在MySQL/MariaDB中有两个不同的表,它们有关于计算机系统的不同数据。computer_name有一个公共字段,但同一台计算机的字段内容可能不同。在表A中,computer_name可以是'hostname',而在表B中,computer_name可以是'hostname@dom1.domain'。我需要查看表A中的col1、col2、col3和表B中的col5、col6、col7,其中

  • 问题内容: 我想有一个通用的方法,无论它是作为指针,切片还是数组提供的,都将始终返回结构值。 我对此的处理方式如下: 去游乐场 如您所见,问题出在从a 或。中获取结构。 我如何扩展上面的函数以从数组或切片中获取struct的值? 更新:我要做的就是将变成。 问题答案: 如果你只是想要的类型,即使片是零,你可以使用像这样: 关于,来自http://golang.org/pkg/reflect/#Ty

  • 问题内容: 我有以下代码在PDF内绘制垂直条形图和折线图。 如何将这2个图形保存在PDF的2个不同页面中。我看到可以使用- 但是,不是使用Canvas,而是使用其中 不存在方法的Drawing对象。 如何将2个图形保存在PDF的2个不同页面中?第二个图形(折线图)的右边与第一个图形(垂直条形图)重叠,从而阻碍了该条形图。 这是我的 代码。 问题答案: 制作画布并在其上渲染图形: 希望能帮助到你 :

  • 我是android开发的新手,请多多包涵。我有三个片段-Frag1、Frag2和frag3。Frag1是一种ListView,有一个项目列表,该列表是在应用程序启动时创建的。Frag2和Frag3基本上对应于视频视图,它将用于从不同的播放器播放不同的视频。其中一个将播放内容视频,另一个将播放广告视频。 当我点击Frag1中的一个特定项时,我希望同时创建Frag2和frag3。我想有两个片段,因为我

  • 问题内容: 我有一个像这样的数组: 从仅具有“ a”的前两列的数组中切出1x2数组的最有效方法是什么? 即 问题答案: 二维numpy数组使用(not )索引,但是您可以对numpy数组和矩阵使用与在python中的普通矩阵相同的切片表示法(只需将它们放在单个):