Go Unmarshal嵌套JSON结构
http://play.golang.org/p/f6ilWnWTjm
我试图解码以下字符串,但只获取空值.
如何在Go中解码嵌套的JSON结构?
我想将以下内容转换为地图数据结构.
请告诉我.
package main
import (
"encoding/json"
"fmt"
)
func main() {
jStr := `
{
"AAA": {
"assdfdff": ["asdf"],
"fdsfa": ["1231", "123"]
}
}
`
type Container struct {
Key string `json:"AAA"`
}
var cont Container
json.Unmarshal([]byte(jStr), &cont)
fmt.Println(cont)
}
Run Code Online (Sandbox Code Playgroud)
Sim*_*Fox 16
在Go中使用嵌套结构来匹配JSON中的嵌套结构.
以下是如何处理示例JSON的一个示例:
package main
import (
"encoding/json"
"fmt"
"log"
)
func main() {
jStr := `
{
"AAA": {
"assdfdff": ["asdf"],
"fdsfa": ["1231", "123"]
}
}
`
type Inner struct {
Key2 []string `json:"assdfdff"`
Key3 []string `json:"fdsfa"`
}
type Container struct {
Key Inner `json:"AAA"`
}
var cont Container
if err := json.Unmarshal([]byte(jStr), &cont); err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", cont)
}
Run Code Online (Sandbox Code Playgroud)
您还可以对内部结构使用匿名类型:
type Container struct {
Key struct {
Key2 []string `json:"assdfdff"`
Key3 []string `json:"fdsfa"`
} `json:"AAA"`
}
Run Code Online (Sandbox Code Playgroud)
或者外部结构和内部结构:
var cont struct {
Key struct {
Key2 []string `json:"assdfdff"`
Key3 []string `json:"fdsfa"`
} `json:"AAA"`
}
Run Code Online (Sandbox Code Playgroud)
如果您不知道内部结构中的字段名称,请使用映射:
type Container struct {
Key map[string][]string `json:"AAA"`
}
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/gwugHlCPLK
还有更多选择.希望这能让你走上正轨.
首先:不要忽略函数或方法返回的错误,除非你有很好的理由这样做。
如果对代码进行以下更改:
err := json.Unmarshal([]byte(jStr), &cont)
if err != nil {
fmt.Println(err)
}
Run Code Online (Sandbox Code Playgroud)
您将看到错误消息,告诉您该值为何为空:
json:无法将对象解组为字符串类型的 Go 值
简单地说:Key
不能是 type string
,所以你必须使用不同的类型。根据Key
值的特性,您有多种解码方式可供选择:
interface{}
(或者map[string]interface{}
如果它始终是 JSON 对象类型)json.RawMessage
归档时间: |
|
查看次数: |
11529 次 |
最近记录: |