登录
首页 >  Golang >  Go问答

来自 json 的嵌套结构,解析为结构

来源:stackoverflow

时间:2024-03-17 09:33:30 361浏览 收藏

对于嵌套的 JSON 结构,可以通过使用自定义类型和转换函数来实现结构的解析和重构。首先,定义一个输入结构体,它与原始 JSON 结构相匹配。然后,定义一个输出结构体,它包含所需的关键重命名和数据转换。使用 `json.Unmarshal` 将输入数据解析到输入结构体中。接着,创建一个转换函数,将输入结构体转换为输出结构体,并根据需要进行重命名和转换。最后,使用转换函数将输入结构体转换为输出结构体,得到所需的数据。

问题内容

我有一个来自 api 查询的数据集,该查询将 json.unmarshal() 获取到结构中。一旦完成数据。然后需要使用不同的键名称导出。

到目前为止我已经有了这个。虽然它有效,但我只是想看看是否有更好的方法。

用于解析传入api的结构体

type bars struct {
    link   string `json:"bar_link"`
    name   string `json:"name"`
}

type foos struct {
    foo    string  `json:"foo"`
    bar    []bars  `json:"bars"`
}

type opts struct {
     something string `json:"something"`
}

type test struct {
    id           string        `json:"id"`
    name         string        `json:"name_from_api"`
    stringdesc   []string      `json:"name_from_api_one"`
    numberfield  int           `json:"name_from_api_two"`
    foo          []foos        `json:"foos"`
    opts         opts          `json:"option_stuff"`
}

使用上述结构解析传入数据。

var test test

json.unmarshal(data, &test)

return test

使用另一个结构更改输出,包括更改一些键:

type Bars struct {
    Link   string `json:"different_name_of_link_key"`
    Name   string `json:"name"`
}

type Foos struct {
    Foo    string  `json:"different_foo_name"`
    Bar    []Bars  `json:"bars"`
}

type Opts struct {
     Something string `json:"something"`
}

type Test struct {
  ID                string        `json:"id"`
  Name              string        `json:"different_name"`
  StringDesc        []string      `json:"different_name_two"`
  NumberField       int           `json:"different_name_three"`
  Foo               []Foos        `json:"foos"`
  Opts              Opts          `json:"option_stuff"`
}

// test is "test" returned in the above unmarshal

var foos []Foos
for _, i := range test.Foo {
  var f []Bars
  for _, b := range i.Bar {
    f = append(f, Bars(b))
  }
  foos = append(foos, Foos{
    Foo: i.Foo,
    Bar: f,
  })
}

return {
  ID: test.ID,
  Name: test.Name,
  StringDesc: test.StringDesc,
  NumberField: test.NumberField,
  Foo: foos,
  Opts: Opts(test.Opts),
}

这是最新的演示:https://play.golang.org/p/yohfzmhfxkp

更新:使用条形图的转换类型。


解决方案


如果你不改变数据,你可以做一个字符串,或者如果你希望用正则表达式替换你得到的初始字符串。如果您要改变数据,请编组并进行字符串/正则表达式替换,这样您就不必维护一些额外的结构。然而,我不知道性能是否受到影响。

本篇关于《来自 json 的嵌套结构,解析为结构》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

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