首页 > 解决方案 > 我的结构未正确格式化为 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字段包含空内容!这不准确,因为如果我将它打印在一个字符串中,我会得到其中的真实信息(+ 分数计算正确 - 这意味着信息在那里)。

请问我做错了什么?

标签: jsongo

解决方案


您编写的代码正在编组一个空结构:

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图书馆在做什么,就很难推测。


推荐阅读