json - skynocover/Wiki-for-GoLang GitHub Wiki

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))
}

陣列轉換

  • 宣告出struct的陣列
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)
	}
}