所以我试图将一个json解析成一些结构,并且可以正常使用以下内容:
type train struct {
ID string `json:"id"`
Price float64 `json:"price,string"`
Distance float64 `json:"Distance,string"`
}
type Station struct {
ID int64 `json:"id,string"`
arrTrain []train`json:"arr"`
depTrain []train`json:"dep"`
}
然而,问题是我希望能够轻松地使用他们的ID引用arrTrain和depTrain中的项目,所以我认为我需要更改Station结构以将arrTrain和depTrain作为具有ID的映射钥匙。解析json时是否可以这样做,或者必须进行后期处理'?
编辑: 正如其中一条评论中所述,不幸的是我的json采用以下形式:
{
"id":1,
"arr": [
{"id":"one","price":"$10.1","Distance":"100km"},
{...}
],
"dep":[
{"id":"one","price":"$10.1","Distance":"100km"},
{...}
]
}
换句话说,ID不在json对象的外部,而arrTrain是列表。
答案 0 :(得分:2)
是的,您可以像这样定义电台:
type Station struct {
ID int64 `json:"id,string"`
arrTrain map[string]train `json:"arr"`
depTrain map[string]train `json:"dep"`
}
你的JSON应该喜欢这个
{
"id":1,
"arr": {
"one":{"id":"one","price":"$10.1","Distance":"100km"},
"two":...
},
"dep":{
"one":{"id":"one","price":"$10.1","Distance":"100km"},
"two":...
}
}
答案 1 :(得分:1)
编辑:是的,你可以。 (这个答案的早期版本声明键只能是字符串,但从1.7开始这不是真的)
您可以在行动with this playground
中看到这一点同样正如评论中指出的那样,您的字段名称必须可以导出以便编码/ json才能工作
type Station struct {
ID int64 `json:"id,string"`
ArrTrain map[string]train `json:"arr"`
DepTrain map[string]train `json:"dep"`
}