假设一个具有通用格式的 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"`而不是创建一个全新的结构来解码这个对象?
1 回答
叮当猫咪
TA贡献1776条经验 获得超12个赞
您需要某个地方来存储 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"
.
(我并不认为地图方法更好,只是一种替代方法。)
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报
0/150
提交
取消