json - 在没有所有键名的情况下在 Go 中解码 JSON

标签 json go unmarshalling

我是 Go 的新手,正在尝试通过向 Unmarshal 提供结构来解码 json blob。问题是,我不知道某些键。我可以解析以下内容

{"age":21,"Travel":{"fast":"yes","sick":false} }

像这样

type user struct {
    Age int
    Travel TravelType
}

type TravelType struct {
    Fast string
    Sick bool
}


func main() {
    src_json := []byte(`{"age":21,"travel":{"fast":"yes","sick":false}}`)
    u := user{}
    err := json.Unmarshal(src_json, &u)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%v", u)

}

获取{21 {yes false}}

但是,我不知道我会如何处理这样的事情-

{
  "age":21,
  "Travel":
     {
         "canada":
         {"fast":"yes","sick":false}, 
         "bermuda": 
         {"fast":"yes","sick":false}, 
         "another unknown key name":
         {"fast":"yes","sick":false},
     }
}

没有在结构中明确声明“加拿大”、“百慕大”等。我如何使用 Unmarshal 来解析上面的 json?我找到了这个 answer , 但不知道它是如何实现的

最佳答案

您可以解码为 map[string]TravelType。将您的 user 结构更改为此,您应该可以开始了:

type user struct {
        Age    int
        Travel map[string]TravelType
}

这是 Go Playground 上的有效概念验证:http://play.golang.org/p/-4k9GE5ZlS

关于json - 在没有所有键名的情况下在 Go 中解码 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21819173/

相关文章:

c# - 将 json 反序列化为 C# 时遇到问题

google-app-engine - 如何对作为 slice 的接口(interface){}进行子 slice ?

go - HTTP : server gave HTTP response to HTTPS client

json - Golang Json编码

.net - JSON.NET 教程

json - MongoDB,将对象数组更改为包含其 ObjectId 的字符串数组

json - 如何使用结构的类型而不是 go 中的标签重新编码结构?

sockets - 在 Golang 中限制 tcp 下载速度

json - Golang - 无法将数字解码为字符串类型的 Go 值

json解码嵌入式结构