package main
import (
"encoding/json"
"fmt"
"log"
)
var json_data = []byte(`
{
"name" : "Golang",
"say" : ["Hello", "World!"]
}
`)
type Data struct {
Name string `json:"name"`
Say []string `json:"say"`
}
func main() {
// 方式 1, 使用結構體解析 json
fmt.Println("> 1")
data := Data{}
if err := json.Unmarshal(json_data, &data); err != nil {
log.Fatal(err)
}
fmt.Println(data.Name, data.Say)
// 方式 2, 使用空接口解析 json
fmt.Println("> 2")
var i interface{}
if err := json.Unmarshal(json_data, &i); err != nil {
log.Fatal(err)
}
ndata := i.(map[string]interface{})
for k, v := range ndata {
switch v := v.(type) {
case string:
fmt.Println(k, v, "(string)")
case []interface{}:
for i, u := range v {
fmt.Println(i, u, " ")
}
default:
fmt.Println(k, v, "(unkonw)")
}
}
}