解码 json 值的更好方法

假设一个具有通用格式的 JSON 对象


  "accounts": [

    {

      "id": "<ACCOUNT>", 

      "tags": []

    }

  ]

}

我可以创建一个带有相应 json 标签的结构来像这样解码它


 type AccountProperties struct {

    ID AccountID `json:"id"`

    MT4AccountID int `json:"mt4AccountID,omitempty"`

    Tags []string `json:"tags"`

  }


  type Accounts struct {

    Accounts []AccountProperties `json:"accounts"`

  }

但最后一个只有一个元素的结构对我来说似乎不正确。有没有一种方法可以简单地说,type Accounts []AccountProperties `json:"accounts"`而不是创建一个全新的结构来解码这个对象?


MMTTMM
浏览 93回答 1
1回答

叮当猫咪

您需要某个地方来存储 json 字符串accounts。用一个:var m map[string][]AccountProperties就足够了,尽管您当然需要知道使用字符串文字accounts来访问由此创建的(单个)映射条目:type AccountProperties struct {    ID           string   `json:"id"`    MT4AccountID int      `json:"mt4AccountID,omitempty"`    Tags         []string `json:"tags"`}func main() {    var m map[string][]AccountProperties    err := json.Unmarshal([]byte(data), &m)    fmt.Println(err, m["accounts"])}D(我必须更改to的类型string并修复{json 中缺失的内容)。这并不比仅使用匿名结构类型短:var a struct{ Accounts []AccountProperties }就调用而言Unmarshall(这样完成后使用起来更方便)。如果您想在调用中使用这样的匿名结构json.Marshall,则需要标记其单个元素以获得小写编码:如果没有标记,它将被调用"Accounts"而不是"accounts".(我并不认为地图方法更好,只是一种替代方法。)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go