我有以下的代码,试图解组此JSON文件,但是行json.Unmarshal([]字节(MSG ["餐厅"]),餐厅)总是给人一个错误.如何让Unmarshal忽略"餐馆"或仅将"餐馆"数据传递给Unmarshal功能?
谢谢!
{
"restaurant": {
"name": "Tickets",
"owner": {
"name": "Ferran"
}
}
}
file, e := ioutil.ReadFile("./rest_read.json")
if e != nil {
fmt.Println("file error")
os.Exit(1)
}
var data interface{}
json.Unmarshal(file, &data)
msg := data.(map[string]interface{})
log.Println(msg)
log.Println(msg["restaurant"])
log.Println(reflect.TypeOf(msg["restaurant"]))
var restaurant Restaurant
json.Unmarshal([]byte(msg["restaurant"]), &restaurant)
log.Println("RName: ", restaurant.Name)
log.Println("Name: ", restaurant.Owner.Name)
Run Code Online (Sandbox Code Playgroud)
小智 18
可以通过解码到接口然后从结果中提取顶级映射来执行通用解组ala gson,例如:
var msgMapTemplate interface{}
err := json.Unmarshal([]byte(t.ResponseBody), &msgMapTemplate)
t.AssertEqual(err, nil)
msgMap := msgMapTemplate.(map[string]interface{})
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅http://blog.golang.org/json-and-go中的 "解码任意数据" .
我建议为您的数据构建一个合适的模型.这将使您能够将数据干净地解组为Go结构.
package main
import (
"encoding/json"
"fmt"
)
type Restaurant struct {
Restaurant RestaurantData `json:"restaurant"`
}
type RestaurantData struct {
Name string `json:"name"`
Owner Owner `json:"owner"`
}
type Owner struct {
Name string `json:"name"`
}
func main() {
data := `{"restaurant":{"name":"Tickets","owner":{"name":"Ferran"}}}`
r := Restaurant{}
json.Unmarshal([]byte(data), &r)
fmt.Printf("%+v", r)
}
Run Code Online (Sandbox Code Playgroud)