package main
//Go by Example 中文:JSON 微信:6686496
import (
"encoding/json"
"fmt"
"os"
)
type Response1 struct {
Page int
Fruits []string
}
type Response2 struct {
Page int `json:"page"`
Fruits []string `json:"fruits"`
}
func main() {
//基本数据类型到 JSON 字符串的编码
bolB,_:=json.Marshal(true)
fmt.Println(string(bolB))
intB,_:=json.Marshal(1)
fmt.Println(string(intB))
fltB,_:=json.Marshal(2.34)
fmt.Println(string(fltB))
strB,_:=json.Marshal("gopher")
fmt.Println(string(strB))
slcD:=[]string{"apple","peach","pear"}
slcb,_:=json.Marshal(slcD)
fmt.Println(string(slcb))
mapD:=map[string]int{"apple":5,"lettuce":7}
mapB,_:=json.Marshal(mapD)
fmt.Println(string(mapB))
//JSON 包可以自动的编码你的自定义类型。编码仅输出可导出的字段,并且默认使用他们的名字作为 JSON 数据的键。
res1D:=&Response1{
Page: 1,
Fruits: []string{"apple","peach","pear"},
}
res1B,_:=json.Marshal(res1D)
fmt.Println(string(res1B))
//标签对应后,输出标签json
res2D:=Response2{
Page: 1,
Fruits: []string{"apple","peach","pear"},
}
res2B,_:=json.Marshal(res2D)
fmt.Println(string(res2B))
byt:=[]byte(`{"num":6.13,"strs":["a","b"]}`)
var dat map[string]interface{}
if err:=json.Unmarshal(byt,&dat);err!=nil{
panic(err)
}
fmt.Println(dat)
num:=dat["num"].(float64)
fmt.Println(num)
strs:=dat["strs"].([]interface{})
str1:=strs[0].(string)
fmt.Println(str1)
str:=`{"page":1,"fruits":["apple","peach"]}`
res:=&Response2{}
json.Unmarshal([]byte(str),&res)
fmt.Println(res)
fmt.Println(res.Fruits[0])
//我们也可以和os.Stdout 一样,直接将 JSON 编码直接输出至 os.Writer流中,或者作为 HTTP 响应体
enc:=json.NewEncoder(os.Stdout)
d:=map[string]int{"apple":5,"lettuce":7}
enc.Encode(d)
}