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

我要做的就是从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"`

}

所以我的问题是,这些东西将如何工作,难道我不能让上面的代码按原样工作吗?


摇曳的蔷薇
浏览 287回答 2
2回答

Smart猫小萌

golang中的小写struct元素是私有的,因此json解码器(是一个外部程序包)无法访问它们。它能够创建struct对象,但不能设置值。它们显示为零,因为它们是默认值0。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go