为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中正确解析 JSON

在 Go 中正确解析 JSON

Go
一只甜甜圈 2023-08-14 14:36:05
从过去 2 天开始,我不知怎么地就被 JSON 和 Go 困住了。我的目标非常简单,一个 Go 程序可以读取 JSON 文件,正确输出它并向该 JSON 添加一些项目,然后将其重写回磁盘。保存的 JSON 文件。{"Category": ["food","music"],"Time(min)": "351","Channel": {    "d2d": 10,    "mkbhd": 8,    "coding Train": 24},"Info": {    "Date":{        "date":["vid_id1","vid_id2","vid_id3"],        "02/11/2019":["id1","id2","id3"],        "03/11/2019":["SonwZ6MF5BE","8mP5xOg7ijs","sc2ysHjSaXU"]        },    "Videos":{        "videos": ["Title","Category","Channel","length"],        "sc2ysHjSaXU":["Bob Marley - as melhores - so saudade","Music","So Saudade","82"],        "SonwZ6MF5BE":["Golang REST API With Mux","Science & Technology","Traversy Media","44"],        "8mP5xOg7ijs":["Top 15 Funniest Friends Moments","Entertainment","DjLj11","61"]    }  }}我已经在 Go 中成功解析了 JSON,但是当我尝试获取 JSON["Info"]["Date"] 时,它会抛出接口错误。我无法创建特定的结构,因为每当调用代码/API 时,所有项目都会动态更改。我用来解析数据的代码// Open our jsonFilejsonFile, err := os.Open("yt.json")if err != nil {fmt.Println(err)}fmt.Println("Successfully Opened yt.json")defer jsonFile.Close()byteValue, _ := ioutil.ReadAll(jsonFile)var result map[string]interface{}json.Unmarshal([]byte(byteValue), &result)json_data := result["Category"] //returns correct ansjson_data := result["Info"]["Date"] // returns error - type interface {} does not support indexing任何帮助/领导都将受到高度赞赏。非常感谢。json去编组解组
查看完整描述

2 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

不幸的是,每次访问解析数据时都必须断言类型:

date := result["Info"].(map[string]interface{})["Date"]

现在datemap[string]interface{},但其静态已知类型仍然是interface{}

这意味着您要么需要提前假设类型,要么在结构可能变化的情况下进行某种类型切换


查看完整回答
反对 回复 2023-08-14
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

您无法使用 访问内部属性result[][]。你需要做如下的事情,


info:= result["Info"]

v := info.(map[string]interface{})

json_data = v["Date"]


查看完整回答
反对 回复 2023-08-14
  • 2 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信