Marshal 用于将struct对象序列化到json对象中

func Marshal(v interface{}) ([]byte, error)

Unmarshal用于反序列化json的函数 根据data将数据反序列化到传入的对象中

func Unmarshal(data []byte, v interface{}) error
package main

import (
        "encoding/json"
        "fmt"
        "os"
)

type ConfigStruct struct {
        Host              string   `json:"host"`
        Port              int      `json:"port"`
        AnalyticsFile     string   `json:"analytics_file"`
        StaticFileVersion int      `json:"static_file_version"`
        StaticDir         string   `json:"static_dir"`
        TemplatesDir      string   `json:"templates_dir"`
        SerTcpSocketHost  string   `json:"serTcpSocketHost"`
        SerTcpSocketPort  int      `json:"serTcpSocketPort"`
        Fruits            []string `json:"fruits"`
}

type Other struct {
        SerTcpSocketHost string   `json:"serTcpSocketHost"`
        SerTcpSocketPort int      `json:"serTcpSocketPort"`
        Fruits           []string `json:"fruits"`
}

func main() {
        jsonStr := `{"host": "http://localhost:9090","port": 9090,"analytics_file": "","static_file_version": 1,"static_dir": "E:/Project/goTest/src/","templates_dir": "E:/Project/goTest/src/templates/","serTcpSocketHost": ":12340","serTcpSocketPort": 12340,"fruits": ["apple", "peach"]}`

        //json str 转map
        var dat map[string]interface{}
        if err := json.Unmarshal([]byte(jsonStr), &dat); err == nil {
                fmt.Println("==============json str 转map=======================")
                fmt.Println(dat)
                fmt.Println(dat["host"])
        }

        //json str 转struct
        var config ConfigStruct
        if err := json.Unmarshal([]byte(jsonStr), &config); err == nil {
                fmt.Println("================json str 转struct==")
                fmt.Println(config)
                fmt.Println(config.Host)
        }

        //json str 转struct(部份字段)
        var part Other
        if err := json.Unmarshal([]byte(jsonStr), &part); err == nil {
                fmt.Println("================json str 转struct==")
                fmt.Println(part)
                fmt.Println(part.SerTcpSocketPort)
        }

        //struct 到json str
        if b, err := json.Marshal(config); err == nil {
                fmt.Println("================struct 到json str==")
                fmt.Println(string(b))
        }

        //map 到json str
        fmt.Println("================map 到json str=====================")
        enc := json.NewEncoder(os.Stdout)
        enc.Encode(dat)

        //array 到 json str
        arr := []string{"hello", "apple", "python", "golang", "base", "peach", "pear"}
        lang, err := json.Marshal(arr)
        if err == nil {
                fmt.Println("================array 到 json str==")
                fmt.Println(string(lang))
        }

        //json 到 []string
        var wo []string
        if err := json.Unmarshal(lang, &wo); err == nil {
                fmt.Println("================json 到 []string==")
                fmt.Println(wo)
        }
}

results matching ""

    No results matching ""