结构体生成json:

package main

import (
	"encoding/json"
	"fmt"
)

type IT struct {
	Company  string
	Subjects []string
	Isok     bool
	Price    float64
}

func main() {
	// 结构体生成json
	s := IT{"itcast", []string{"go", "c++", "python"}, true, 66.66}

	//buf, err := json.Marshal(s) // 转换为json
	buf, err := json.MarshalIndent(s, "", "	") // 功能和 Marshal 一样,更美观的输出

	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	fmt.Println("buf = ", string(buf))
}

二次编码struct_tag的使用:

package main

import (
	"encoding/json"
	"fmt"
)

type IT struct {
	Company  string   `json:"-"`        // 这个字段不会输出
	Subjects []string `json:"subjects"` // 二次编码
	Isok     bool     `json:",string"`  //字符串方式输出
	Price    float64  `json:",string"`
}

func main() {
	// 结构体生成json
	s := IT{"itcast", []string{"go", "c++", "python"}, true, 66.66}

	//buf, err := json.Marshal(s) // 转换为json
	buf, err := json.MarshalIndent(s, "", "	") // 功能和 Marshal 一样,更美观的输出

	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	fmt.Println("buf = ", string(buf))
}

map生成json:

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	m := make(map[string]interface{}, 4)
	m["company"] = "itcast"
	m["subjects"] = []string{"go", "c++", "python", "test"}
	m["isok"] = true
	m["price"] = 66.66

	result, err := json.Marshal(m)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(string(result))
}

json解析成结构体:

package main

import (
	"encoding/json"
	"fmt"
)

type IT struct {
	Company  string   `json:"company"`
	Subjects []string `json:"subjects"`
	Isok     bool     `json:",isok"`
	Price    float64  `json:",price"`
}
type IT2 struct {
	Subjects []string `json:"subjects"`
}

func main() {
	buf := `{
		"company":"itcast",
        "subjects": [
                "go",
                "c++",
                "python"
        ],
        "Isok": true,
        "Price": 66.66
	}`
	var temp IT
	err := json.Unmarshal([]byte(buf), &temp)
	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	fmt.Println("temp = ", temp)

	// 只解析一部分
	var temp2 IT
	err = json.Unmarshal([]byte(buf), &temp2)
	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	fmt.Println("temp2 = ", temp2)
}

json解析成map:

package main

import (
	"encoding/json"
	"fmt"
)

type IT struct {
	Company  string   `json:"company"`
	Subjects []string `json:"subjects"`
	Isok     bool     `json:",isok"`
	Price    float64  `json:",price"`
}

func main() {
	buf := `{
		"company":"itcast",
        "subjects": [
                "go",
                "c++",
                "python"
        ],
        "Isok": true,
        "Price": 66.66
	}`

	m := make(map[string]interface{}, 4)

	// json转换成map
	err := json.Unmarshal([]byte(buf), &m)
	if err != nil {
		fmt.Println("err = ", err)
		return
	}
	fmt.Println("m = ", m)

	// 反推回原来的类型才能操作
	for _, value := range m {
		switch data := value.(type) {
		case string:
			fmt.Println(data)
		case bool:
			fmt.Println(data)
		case float64:
			fmt.Println(data)
		case []interface{}:
			fmt.Println(data)
		}
	}
}