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