上篇教程学院君给大家介绍了Go语言内置的encoding/json标准库以及如何通过它提供的方法对数据进行编解码。不过在上篇教程的示例中,要解码的JSON数据结构是已知的,在实际开发过程中,有时候我们可能并不知道要解码的JSON数据结构是什么样子的,这个时候,应该怎么处理呢?
类型转换规则在前面介绍接口的时候,我们提到基于Go语言的面向对象特性,可以通过空接口来表示任何类型,所以同样,这也适用于未知结构的JSON数据解码:只需要将这段JSON数据解码输出到一个空接口即可。
在实际解码过程中,JSON结构里边的数据元素将做如下类型转换:
布尔值将会转换为Go语言的bool类型;
数值会被转换为Go语言的float64类型;
字符串转换后还是string类型;
JSON数组会转换为[]interface{}类型;
JSON对象会转换为map[string]interface{}类型;
null值会转换为nil。
在Go语言标准库encoding/json中,允许使用map[string]interface{}和[]interface{}类型的值来分别存放未知结构的JSON对象或数组。
实例演示下面我们以上篇教程的解码示例代码来做演示,只是这次,我们将解码结果映射到空接口对象:
u3:=[]byte(`{"name":"学院君","website":"