了解 JSON 解组行为
尝试使用 json.Unmarshal 解组 JSON 数据时,了解包如何与变量类型交互至关重要.
界面谬误
假设 json.Unmarshal 自动利用与接口关联的具体结构是一种常见的误解。该包需要有关所需解组类型的明确指导。
示例:迷失在翻译中
考虑提供的示例代码:
type Foo struct { Bar string `json:"bar"` } func getFoo() interface{} { return Foo{"bar"} }
The目的是让 getFoo() 返回一个 Foo 结构,但由于它被分配给一个接口,所以它被视为 地图。这是因为当接口传递给 json.Unmarshal 时,包将其解释为空接口并生成 JSON 对象的映射。
解决方案:显式类型声明
要解决此问题,请显式传递指向所需结构类型的指针接口:
func getFoo() interface{} { return &Foo{"bar"} }
现在,当 json.Unmarshal 接收接口时,它会识别指向结构体的指针,并正确地将 JSON 数据解组到结构体字段中。
关键要点:
请记住,json.Unmarshal 依赖于提供的显式类型信息来确定解组目的地。如果您希望它使用特定的结构,则必须在接口中显式传递该类型的值或指向该类型的指针。
以上是`json.Unmarshal` 如何处理接口,以及为什么显式类型声明至关重要?的详细内容。更多信息请关注PHP中文网其他相关文章!