gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:37:13 24 4
gpt4 key购买 nike

我要做的就是从一个 json 编码文件创建一个结构响应数组。

包含 json 数据的文件如下所示。

猫初始化.txt

{"events": [{"action":"cpr","id":69,"sha1":"abc","cpr":"cpr_data0"},{"action":"cpr","id":85,"sha1":"def","cpr":"cpr_data1"}]}

我解决这个问题的方法是

  • 我创建了一个map[string][]Response

    类型的response
  • .. 从文件中解码 JSON

  • .. 创建了 []Response

    类型的 responseStruct

但不知何故,当我检查值时,它们看起来都是 0 或空的

map [事件:[{ 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"`
}

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

最佳答案

Go 在对象中有公共(public)字段和私有(private)字段的概念,唯一的区别是它们是否以首字母大写开头。这不仅适用于代码模块,还适用于 reflect 包和使用它的东西。所以在你的初始版本中

type Response struct {
action string `json:"action"`
...
}

您的源包之外的任何东西,甚至“encoding/json”模块,都无法看到私有(private)字段,因此无法填充它们。通过大写将这些更改为公共(public)字段 Action 和其他字段名称使它们对 JSON 解码器可见。

关于go - 通过在 go 中解码 JSON 文件来创建结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51571090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com