json - 我的结构未正确格式化为 JSON

标签 json go

这个问题在这里已经有了答案:





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/

相关文章:

ruby - 访问哈希值和数组 Ruby

html - 在 PHTML 文件中使用 Go .Variable inside range block

json - jq:将对象数组转换为单个对象并将每个数组索引用作新键

javascript - 在 json 数组中搜索

go - 在同一行写入值

windows - exec.command不在Windows(golang)上执行

arrays - 在 Golang 中,如何将循环的结果添加到未知大小的动态数组中?

websocket - 如何在 GO 中存储 websocket 连接

java - 通过Java为Mongodb Collection中的每个文档添加新字段

java - 获取所有路径变量