json 包实现了json对象的编解码
func Marshal(v interface{}) ([]byte, error)
package main
import (
"encoding/json"
"fmt"
"log"
)
type User struct {
Name string
Age int64
}
func main() {
user := User{"酷走天涯",27}
b,error:=json.Marshal(user)
if error != nil {
log.Fatal(error)
}
fmt.Println(string(b))
}
image.png
func Unmarshal(data []byte, v interface{}) error
package main
import (
"encoding/json"
"fmt"
"log"
)
type User struct {
Name string
Age int64
}
func main() {
data := []byte(`{"Name":"酷走天涯","Age":27}`)
var user *User
error:=json.Unmarshal(data,&user)
if error != nil {
log.Fatal(error)
}
fmt.Println(user)
}
image.png
package main
import (
"encoding/json"
"fmt"
"log"
)
type Animal struct {
Kind string
Data json.RawMessage
}
type Dog struct{
Name string
}
type Sheep struct{
Name string
Age int
}
func main() {
data := []byte(`[{"Kind":"Dog","Data":{"Name":"小黄"}},{"Kind":"Sheep","Data":{"Name":"小绵阳","Age":12}}]`)
// 第一层转换数据
var animals *[]Animal
error:=json.Unmarshal(data,&animals)
if error != nil {
log.Fatal(error)
}
// 第二层 跟你kind 类型选择对应的模型进行转换
for _,c := range *animals{
var dst interface{}
switch c.Kind {
case "Dog": dst = new(Dog)
case "Sheep": dst = new(Sheep)
}
error := json.Unmarshal(c.Data,dst)
if error != nil {
fmt.Println(error)
}
fmt.Println(dst)
}
fmt.Println(animals)
}
image.png
func HTMLEscape(dst *bytes.Buffer, src []byte)
HTMLEscape 函数将json编码的src中的<、>、&、U+2028 和U+2029字符替换为\u003c、\u003e、\u0026、\u2028、\u2029 转义字符串,以便json编码可以安全的嵌入HTML的<script>标签里, 网络浏览器不支持在<script>标签中使用标准HTML转义
package main
import (
"encoding/json"
"bytes"
"fmt"
)
func main() {
data := []byte(`<div>这个是html标签</div>`)
var buffer bytes.Buffer
json.HTMLEscape(&buffer,data)
fmt.Println(buffer.String())
}
image.png
func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)
func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error
package main
import (
"encoding/json"
"fmt"
)
func main() {
data := []map[string]string {{"name":"小黄"},{"name":"小白"}}
result,_:=json.MarshalIndent(data,"=","\t")
fmt.Println(string(result))
}
image.png
func Compact(dst *bytes.Buffer, src []byte) error
package main
import (
"encoding/json"
"fmt"
"bytes"
)
func main() {
data := []map[string]string { {"name": "小黄"},{"name": "小白"}}
src,_ := json.MarshalIndent(data,"","\t")
var buf bytes.Buffer
json.Compact(&buf,src)
fmt.Println(string(src))
fmt.Println(buf.String())
}
image.png
json:"-"
)json:"myName"
)json:"myName,omitempty"
)json:",omitempty"
)json:",string"
)package main
import (
"encoding/json"
"fmt"
)
type User struct{
Id int `json:"-"`
Name string `json:"myName"`
Age int `json:"myAge,omitempty"`
Address string `json:",omitempty"`
Sex int `json:",string"`
}
func main() {
user := User{Id:10,Name:"酷走天涯",Age:12,Address:"dd",Sex:1}
data,error := json.Marshal(user)
if error != nil {
fmt.Println(error)
}
fmt.Println(string(data))
user = User{Id:10,Name:"酷走天涯",Sex:1,Address:""}
data,error = json.Marshal(user)
if error != nil {
fmt.Println(error)
}
fmt.Println(string(data))
}
image.png