【问题标题】:How to unmarshal struct into map in golang [closed]如何在golang中将结构解组到地图中[关闭]
【发布时间】:2018-07-02 07:24:25
【问题描述】:

我有一个 Json:

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

我不知道如何将行星字段解组为 map[string]int,因此我将在不解组它们的情况下访问元素,就像在此示例中一样:json to map 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["EARTH"]) - 返回

fmt.Println(user.Planets["EARTH"]) - 不支持索引

【问题讨论】:

  • 你试过什么?你遇到了什么问题?
  • 感谢您提供代码。那么问题是什么?您的描述似乎描述了预期的行为。
  • 请正确书写问题陈述。对此没有理解。

标签: json dictionary go


【解决方案1】:

这是一个使用您的对象定义进行编组和解组的示例

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)

}

你可以通过bb.Planets["EARTH"]获取地图的一个元素

我希望你能发现这很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 2018-04-20
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多