json解码嵌入式结构

标签 json go unmarshalling

我想解码为结构 Outer 定义为:

type Outer struct {
    Inner
    Num int
}

type Inner struct {
    Data string
}
func (i *Inner) UnmarshalJSON(data []byte) error {
    i.Data = string(data)
    return nil
}

使用 json.Unmarshal(data, &Outer{}) 似乎只使用 InnerUnmarshalJSON 并忽略 Num 字段:https://play.golang.org/p/WUBfzpheMl

我有一个笨重的 solution我在其中手动设置了 Num 字段,但我想知道是否有人有更干净或更简单的方法来做到这一点。

谢谢!

最佳答案

发生这种情况是因为 Inner正在嵌入 Outer .这意味着当 json 库在 Outer 上调用 unmarshaler 时,它最终会在 Inner 上调用它.

因此,里面func (i *Inner) UnmarshalJSON(data []byte) , data参数包含整个 json 字符串,然后您将处理 Inner仅。

您可以通过制作 Inner 来解决这个问题Outer 中的显式字段

Outer struct {
    I Inner // make Inner an explicit field
    Num int `json:"Num"`
}

Working example

关于json解码嵌入式结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38982445/

相关文章:

javascript - Jquery 获取 .each 循环内 slider 的值

html - 在 nunjucks 中循环对象时如何限制迭代次数

go - 在 Go 中访问结构属性

sockets - ZMQ sockets缺乏线程安全如何处理?

json - Golang 使用动态相关键使用 json

javascript - Node JS : Convert retrieved data from DB as JSON to Plain text

php - 使用php将日期和时间输入数据库

go - 检测网络连接可用性变化

java - JAXB 使用 namespace 解码..如何?

go - 如何创建一个通用函数来解码所有类型?