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

通过解码go中的JSON文件来创建结构数组

通过解码go中的JSON文件来创建结构数组

Go
摇曳的蔷薇 2021-04-16 22:19:58
我要做的就是从json编码的文件中创建一个struct Response数组。包含json数据的文件如下所示。猫init.txt{"events": [{"action":"cpr","id":69,"sha1":"abc","cpr":"cpr_data0"},{"action":"cpr","id":85,"sha1":"def","cpr":"cpr_data1"}]}我解决这个问题的方法是我创建了一个response类型的map[string][]Response..解码文件中的JSON..创建了一个responseStruct类型[]Response但是以某种方式,当我检查值时,它们都看起来为0或为空map[events:[{ 0  } { 0  }]上面提到的方法有什么问题。type Response struct {  action string `json:"action"`  id     int64  `json:"id"`  sha1   string `json:"sha1"`  cpr    string `json:"cpr"`}func main() {  file, err := os.Open("init.txt")  if err != nil {    fmt.Println(err)    os.Exit(1)  }  var response map[string][]Response  err = json.NewDecoder(file).Decode(&response)  if err != nil {    fmt.Println(err)    os.Exit(1)  }  var responseArray []Response  responseArray = response["events"]  for _, responseStruct := range responseArray {    fmt.Println("id =", responseStruct.id)    fmt.Println("action =", responseStruct.action)    fmt.Println("sha1 = ", responseStruct.sha1)    fmt.Println("cpr =", responseStruct.cpr)    fmt.Println("==========")  }  fmt.Println(response)}好吧,如果我修改结构使其看起来像这样,那就可以了type Response struct {  Action string `json:"action"`  ID     int64  `json:"id"`  Sha1   string `json:"sha1"`  Cpr    string `json:"cpr"`}所以我的问题是,这些东西将如何工作,难道我不能让上面的代码按原样工作吗?
查看完整描述

2 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

golang中的小写struct元素是私有的,因此json解码器(是一个外部程序包)无法访问它们。它能够创建struct对象,但不能设置值。它们显示为零,因为它们是默认值0。


查看完整回答
反对 回复 2021-04-19
  • 2 回答
  • 0 关注
  • 286 浏览
慕课专栏
更多

添加回答

举报

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