douwen1915 2014-04-23 15:51
浏览 142
已采纳

golang json解组map [string] interface {}的一部分

I have the following code to try to Unmarshal this json file, however the line json.Unmarshal([]byte(msg["restaurant"]), &restaurant) always gives an error. How can I make Unmarshal ignore the "restaurant" or pass only the "restaurant" data to the Unmarshal function?

Thanks!

{
  "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)
  • 写回答

3条回答 默认 最新

  • dter8514 2014-04-23 16:58
    关注

    I would propose to construct a proper model for your data. This will enable you to cleanly unmarshal your data into a Go struct.

    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)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊