我有一个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"]) - 不支持索引
答案 0 :(得分:2)
以下是使用对象定义的marshal和unmarshal的示例
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"]
我希望你能发现这很有用。