json
import (
"encoding/json"
)
基本轉換
package main
import (
"encoding/json"
"fmt"
)
type Person struct {
Id int `json:"id"`
Name string `json:name`
}
func main() {
data := []byte(`{"id" : 1 , "name" : "Daniel"}`)
var person Person
json.Unmarshal(data, &person)
fmt.Println(person)
jsondata, _ := json.Marshal(person)
fmt.Println(string(jsondata))
}
陣列轉換
func main() {
data := []byte(`[{"id" : 1 , "name" : "Daniel"},{"id" : 2 , "name" : "Allen"},{"id" : 3 , "name" : "Sam"}]`)
var persons []Person //新陣列
json.Unmarshal(data, &persons)
fmt.Println(persons)
jsondata, _ := json.Marshal(persons)
fmt.Println(string(jsondata))
}
type Persons []Person //新型別
func main() {
data := []byte(`[{"id" : 1 , "name" : "Daniel"},{"id" : 2 , "name" : "Allen"},{"id" : 3 , "name" : "Sam"}]`)
var persons Persons
json.Unmarshal(data, &persons)
fmt.Println(persons)
jsondata, _ := json.Marshal(persons)
fmt.Println(string(jsondata))
}
巢狀結構
type Person struct {
Id int `json:"id"`
Name string `json:name`
}
type Address struct {
HsnId string `json:"hsnId"`
Addr string `json:"addr"`
}
type Students struct {
ClassId string `json:"cId"`
ClassType string `json:"cType"`
Addr Address `json:"saddr"`
List []Person `json:"persons"`
}
func main() {
data := []byte(`{"cId" : "A" ,
"cType" : "English" ,
"saddr" : { "hsnId" : "C" , "addr" : "中正路12號" } ,
"persons" : [{"id" : 1 , "name" : "Daniel"},{"id" : 2 , "name" : "Allen"},{"id" : 3 , "name" : "Sam"}]}`)
var students Students
json.Unmarshal(data, &students)
fmt.Println(students)
for _, p := range students.List {
fmt.Println(p)
}
jsondata, _ := json.Marshal(students)
fmt.Println(string(jsondata))
}
轉型成map
func main() {
data := []byte(`{"cId" : "A" , "cType" : "English" , "saddr" : { "hsnId" : "C" , "addr" : "中正路12號" } , "persons" : [{"id" : 1 , "name" : "Daniel"},{"id" : 2 , "name" : "Allen"},{"id" : 3 , "name" : "Sam"}]}`)
var jsonObj map[string]interface{}
json.Unmarshal([]byte(data), &jsonObj)
classID := jsonObj["cId"].(string)
fmt.Println(classID)
studentsAddr := jsonObj["saddr"].(map[string]interface{})
addr := studentsAddr["addr"].(string)
fmt.Println(addr)
persons := jsonObj["persons"].([]interface{})
for _, p := range persons {
person := p.(map[string]interface{})
id := int(person["id"].(float64))
name := person["name"].(string)
fmt.Printf("%d , %v \n", id, name)
}
}