encoding - skynocover/Wiki-for-GoLang GitHub Wiki
encoding
json
"encoding/json"
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)//將json轉成struct
fmt.Println(person)
jsondata, _ := json.Marshal(person) //將struct轉成json
fmt.Println(string(jsondata))
}
//{1 Daniel}
//{"id":1,"Name":"Daniel"}
多個json轉型
type Person struct {
Id int `json:"id"`
Name string `json:name`
}
type Persons struct {
List []Person
}
//或是宣告 type Persons []Person
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))
}
//[{"id":1,"Name":"Daniel"},{"id":2,"Name":"Allen"},{"id":3,"Name":"Sam"}]
使用map接走json
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) //將解譯過的資料放至於jsonObj
classID := jsonObj["cId"].(string)
fmt.Println(classID)
studentsAddr := jsonObj["saddr"].(map[string]interface{}) //巢狀map
hsnID := studentsAddr["hsnId"].(string)
fmt.Println(hsnID)
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)
}
}
/*
A
C
1 , Daniel
2 , Allen
3 , Sam
*/