当前位置: 首页 > 知识库问答 >
问题:

如何在golang〔关闭〕中将结构解组为地图

燕琨
2023-03-14

编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。

我有一个Json:

{
  "id": "me",
  "name": "myname",
  "planets": {
      "EARTH": 3,
      "MARS": 4
  }
}

我不知道如何将元帅行星字段解构到map[string]int中,所以我可以访问元素而无需像这个例子中那样取消marshade:json来映射Golang

代码如下:

package main

import (
   "encoding/json"
   "fmt"
  )

type User struct {
   ID      string `json:"id"`
   Name    string `json:"name"`
   Planets struct {
       Planet map[string]*json.RawMessage
    } `json:"planets"`
}

 func main() {
    data := `{
      "id": "me",
      "name": "myname",
      "planets": {
      "EARTH": 3,
       "MARS": 4
      }
    }`

   user := &User{}
   err := json.Unmarshal([]byte(data), user)
   if err != nil {
       fmt.Println("ERROR " + err.Error())
   }
    fmt.Println(user.ID)
    fmt.Println(user.Planets.Planet["EARTH"])
  }

fmt.Println(user.Planets.Planet[“地球])-返回

fmt.Println(user.Planets[“地球])-不支持索引

共有1个答案

韩良策
2023-03-14

这是一个使用对象定义的列表和散集示例

package main

import (
    "encoding/json"
    "fmt"
)

type MyObject struct {
    ID      string         `json:"id"`
    Name    string         `json:"name"`
    Planets map[string]int `json:"planets"`
}

func main() {
    aa := &MyObject{
        ID:   "123",
        Name: "pepe",
        Planets: map[string]int{
            "EARTH": 3,
            "MARS":  4,
        },
    }
    // Marshal
    out, err := json.Marshal(aa)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(out))

    // Unmarshal
    bb := &MyObject{}
    err = json.Unmarshal(out, bb)
    fmt.Println(bb.ID, bb.Name, bb.Planets)

}

你可以用<code>bb.Planets〔“地球”〕

希望你能觉得这个有用。

 类似资料:
  • 问题内容: 我想将一个结构转换为Golang中的地图。如果我可以在创建的地图中使用JSON标签作为键(否则默认为字段名称),那也将很好。 编码愉快!:) 原始帖子 到目前为止,我具有此功能,我正在使用反射包,但我不太了解如何使用该包,请多多包涵。 我也查看了JSON包的源代码,因为它应该包含我所需的实现(或部分实现),但理解得并不多。 问题答案: 我也需要这样的东西。我正在使用将结构转换为地图的内

  • 问题内容: 我正在尝试解析一个包含JSON数据的文件: 由于这是带有动态键的JSON数组,因此我认为我可以使用: 但是,我无法使用来解析文件: 将包含JSON数据的文件解析为Go结构的最简单方法是将数组(仅字符串类型转换为字符串类型)? 编辑: 要进一步详细说明可接受的答案-的确,我的JSON是地图数组。为了使我的代码正常工作,该文件应包含: 然后可以将其读入 问题答案: 这是因为您的json实际

  • 问题内容: 我是mongodb-go-driver的新手。但是我被困住了。 查看m [id]的内容时,它没有内容-全部为null。 我的地图是这样的:m map [string] Language 语言定义如下: 我究竟做错了什么? 我正在使用此示例进行学习:https : //github.com/mongodb/mongo-go- driver/blob/master/examples/doc

  • 问题内容: 我正在尝试在Go中解码一些json,但某些字段不会被解码。在此处查看在浏览器中运行的代码: 我究竟做错了什么? 我只需要MX记录,所以没有定义其他字段。据我从godoc了解到,您不需要定义不需要/不需要的字段。 问题答案: 按照有关json.Unmarshal的go documentaiton 所述,您只能对导出的字段进行解码,主要原因是外部软件包(例如)无法访问未导出的字段。 如果您

  • 问题内容: 我对初始化包含映射的结构的最佳方法感到困惑。运行此代码将产生: 另一个想法是使用一种可以在地图为空的情况下对其进行初始化的方法: 还有其他选择吗?只是想看看是否有一种普遍接受的方法。 问题答案: 我可能会使用构造函数来做到这一点: 我已经在标准包中找到了这个示例(虽然没有地图,但是有切片):

  • 问题内容: 我一直在研究使用结构作为golang映射中的键。此结构中的一个字段也应该是一个映射,这似乎与此处提供的文档背道而驰,该文档只说那些具有可与之进行比较的字段且可以在用作映射中键的结构的字段中的结构。但是,我继续尝试以下方法: 输出为: 这似乎违反了文档,因为用作键的结构中的字段是映射。我似乎出了什么问题? 问题答案: 在您的示例中,映射键是指向结构的指针,而不是结构本身。即使指针指向的项