如果要解码一段未知结构的JSON,只需将这段JSON数据解码输出到一个空接口即可。在解码JSON数据的过程中,JSON数据里边的元素类型将做如下转换:
1)JSON中的布尔值将会转换为Go中的bool类型;
2)数值会被转换为Go中的float64类型;
3)字符串转换后还是string类型;
4)JSON数组会转换为[]interface{}类型;
5)JSON对象会转换为map[string]interface{}类型;
6)null值会转换为nil。
在Go的标准库encoding/json包中,允许使用map[string]interface{}和[]interface{}类型的值来分别存放未知结构的JSON对象或数组,示例代码如下:
package main
import (
"fmt"
"encoding/json"
)
func main() {
b := []byte(`{"Title":"Go语言编程","Authors":["XuShiwei","HughLv","Pandaman","GuaguaSong","HanTuo","BertYuan","XuDaoli"],"Publisher":"ituring.com.cn","IsPublished":true,"Price":9.99,"Sales":1000000}`)
var r interface{}
err := js