json - 我的结构未正确格式化为 JSON
问题描述
首先,从这个结构构建一个数组,作为最终 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
图书馆在做什么,就很难推测。
推荐阅读
- c - CS50 2019 Vigenere - 第二个循环
- powershell - Powershell hashtable.containskey 总是返回 true
- visual-studio-2019 - 从 Visual Studio 2019 将 Hololens 应用程序部署到模拟器时出现问题
- android - Flutter + android在Android中的Firebase Cloud Messaging上接收数据消息
- excel - 在一行的单元格范围内设置背景颜色(不使用条件格式)
- xamarin.forms - 在 Xamarin 表单中重用导航栏字体
- javascript - AWS Amplify 错误:(节点:68674)UnhandledPromiseRejectionWarning:NoSuchKey:指定的密钥不存在
- bash - Kubernetes postStart 生命周期钩子以 7 退出
- javascript - vuetifyjs 选择 'hide-selected=true' 显示仅列出前 20 个项目
- python - 有没有办法使用 python 重命名 restAPI 本地服务器中的图像?