使用Golang解析含特殊键的JSON结果为空,如何获取目标值?
解决Go解析嵌套JSON字段为空的问题
你的解析结果为空主要有两个原因:
- 外层JSON的根字段是
"x",但你的结构体里没有对应这个字段 - 结构体中
Foo的类型和JSON结构不匹配,"l.a"是"x"对象下的直接字段,并非嵌套map结构
方案一:用结构体精准解析
直接定义匹配JSON结构的结构体,对齐嵌套层级与字段标签:
package main import ( "encoding/json" "fmt" ) type Object struct { X struct { LA string `json:"l.a"` // 用LA作为Go字段名,标签对应JSON里的"l.a" } `json:"x"` // 对应外层的"x"字段 } func main() { body := []byte(`{"x":{"l.a":"test"}}`) var obj Object err := json.Unmarshal(body, &obj) if err != nil { fmt.Println(err) return } fmt.Println("test值为:", obj.X.LA) // 输出 test值为: test }
方案二:用嵌套map解析
如果不想定义结构体,可直接用两层map解析:
package main import ( "encoding/json" "fmt" ) func main() { body := []byte(`{"x":{"l.a":"test"}}`) var data map[string]map[string]string err := json.Unmarshal(body, &data) if err != nil { fmt.Println(err) return } fmt.Println("test值为:", data["x"]["l.a"]) // 输出 test值为: test }
方案三:用map[string]interface{}通用解析
若JSON结构不确定,可使用通用类型解析后做类型断言:
package main import ( "encoding/json" "fmt" ) func main() { body := []byte(`{"x":{"l.a":"test"}}`) var data map[string]interface{} err := json.Unmarshal(body, &data) if err != nil { fmt.Println(err) return } xObj := data["x"].(map[string]interface{}) fmt.Println("test值为:", xObj["l.a"]) // 输出 test值为: test }
内容的提问来源于stack exchange,提问作者dave
相关产品推荐
相关产品推荐

