来自Golang的json的Struct地图

时间:2017-03-15 21:02:45

标签: json go

所以我试图将一个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是列表。

2 个答案:

答案 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"`
}