JSON 解码为结构体与映射
在所描述的场景中,应用程序接收一个包含与 JSON 匹配的结构体的接口{}作为字节数组接收的结构。然而,在 JSON 解码时,结果是一个映射而不是预期的结构。
此行为是由于 json.Unmarshal 处理指针的方式造成的。通过引用最初保存该结构的接口{},解码过程无法确定底层类型。因此,它返回一个简单的映射,而不是所需的结构。
要纠正此问题,可以考虑两种方法:
1。直接接口转换:
将指向结构体的指针直接传递给 json.Unmarshal 作为抽象接口:
<code class="go">var ping interface{} = &Ping{} deserialize([]byte(`{"id":42}`), ping)</code>
2.基于反射的指针创建:
如果指向结构体的直接指针不可用,请利用反射创建一个新指针,反序列化到其中,然后将值复制回来:
<code class="go">var ping interface{} = Ping{} nptr := reflect.New(reflect.TypeOf(ping)) deserialize([]byte(`{"id":42}`), nptr.Interface()) ping = nptr.Interface()</code>
通过采用这两种方法中的任何一种,解码过程都可以正确识别底层结构并从 JSON 数据填充其字段。
以上是以下是一些标题选项,重点关注问题和解决方案: **直接问题的详细内容。更多信息请关注PHP中文网其他相关文章!