go json的使用
来源:原创
时间:2019-03-09
作者:脚本小站
分类:GoLang
结构体生成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) } } }