json.Unmarshal 是一个多功能函数,它使用 JSON 字符串中的值填充数据结构。然而,当预期输出与实际输出不同时,会出现一个常见的困惑,结果结构是映射而不是预期的结构。为了解决这种差异,我们深入研究代码并探索底层机制。
在给定的示例中,“坏”函数将名为 ping 的接口{}分配给 Ping 结构体。但是,当调用 json.Unmarshal 时,它遇到一个没有具体类型信息的抽象接口。因此,它将传入的 JSON 解释为映射,这解释了观察到的行为。
要纠正此问题,我们需要显式向 json.Unmarshal 提供预期的结构。这可以通过将 interface{} 分配给指向 Ping 结构的指针来实现。通过进行这种微妙的更改,我们向函数传达了它应该使用的底层类型。或者,我们可以使用反射创建一个指向 Ping 结构的新指针并反序列化到其中,随后将值复制回 ping。
通过这些修改,json.Unmarshal 函数成功将 JSON 编组到所需的位置Ping struct,消除了差异并符合我们的期望。通过了解该函数的复杂性,我们可以利用它的强大功能来可靠且准确地填充数据结构。
以上是为什么 json.Unmarshal 有时返回映射而不是结构?的详细内容。更多信息请关注PHP中文网其他相关文章!