这个问题在这里已经有了答案:
json.Marshal(struct) returns "{}"
(3 个回答)
2年前关闭。
首先,从这个结构构建一个数组,作为最终 JSON 结果的一部分:
type Part struct {
Id string
Username string
Score string
}
填充数组并获得总分:
var partArr []Part
var allscores decimal.Decimal
for _, result := range users {
partArr = append(partArr, Part{
id: string(result.id),
username: fmt.Sprintf("%s", result.username),
quantity: fmt.Sprintf("%s", result.score),
})
allscores = allscores+result.score
}
然后将其添加到另一个结构(ToSend):
type ToSend struct {
Parts []Part
Scores decimal.Decimal
}
toSend := &ToSend{
Parts: partArr,
Scores: allscores,
}
我们将其格式化为 JSON:
toJson, err := json.Marshal(ToSend)
if err != nil {
log.Fatal("Cannot encode to JSON ", err)
}
但结果不是等待的:
{"Parts":[{},{},{},{},{}], "Scores":"1850"}
看来
Parts
字段包含空内容!这不准确,因为如果我将它打印在一个字符串中,我会得到其中的真实信息(+ 分数计算正确 - 这意味着信息在那里)。请问我做错了什么?
最佳答案
您编写的代码正在编码一个空结构:
toJson, err := json.Marshal(ToSend)
你应该编码你的对象:
toJson, err := json.Marshal(toSend) // not json.Marshal(ToSend)
if err != nil {
log.Fatal("Cannot encode to JSON ", err)
}
这并不能解释为什么要填充分数,但是如果不知道
decimal
是什么就很难推测。图书馆在做。
关于json - 我的结构未正确格式化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58332122/