我一直在研究 Go API,我需要对一些 JSON 进行编码才能提供服务。
我的结构是这样的:
{
"20.0.12":{
"someData":"yes",
"someMoreData":"no",
"littleMore":"ok"
},
"20.0.13":{
"someData":"AH",
"someMoreData":"blue",
"littleMore":"red"
}
}
Run Code Online (Sandbox Code Playgroud)
所以子数据有具体的标题。someData、someMoreData 和 littleMore。这些头衔永远不会改变。但是,父级确实 - 20.0.12 和 20.0.13
我们可以在 Go 中使用如下结构创建 JSON:
type TestData struct{
SomeData string `json:"someData"`
SomeMoreData string `json:"someMoreData"`
LittleMore string `json:"littleMore"`
}
Run Code Online (Sandbox Code Playgroud)
然后只需运行一个 json.NewEncoder(someVar).Encode({some instance of TestData})
是否可以让这些键是动态的?例如,如果我不想让 someData 总是说 someData?例如,我正在使用的数据库将该键从 someData 更改为 someDataX。是否可以让我的 json 密钥反映这一点?下面的代码不会运行,但这是我想要实现的:
type TestData (arg string, arg2 string){
arg string `json:"`+arg+`"`
}
Run Code Online (Sandbox Code Playgroud)
正如您在问题末尾所描述的那样,您不能拥有运行时动态类型,但为此您不需要它们;你只需要一个map. 您还需要导出你的结构域,如果你想和使用它们encoding/json。例如:
type TestData struct {
SomeData string `json:"someData"`
SomeMoreData string `json:"someMoreData"`
LittleMore string `json:"littleMore"`
}
myData := map[string]TestData{
"20.0.12": TestData{
SomeData: "yes",
SomeMoreData: "no",
LittleMore: "ok",
},
"20.0.13": TestData{
SomeData: "AH",
SomeMoreData: "blue",
LittleMore: "red",
},
}
json.NewEncoder(someWriter).Encode(myData)
Run Code Online (Sandbox Code Playgroud)
在此处查看工作示例:https : //play.golang.org/p/62mgpdY_v7c