本文主要是介绍encoding/json,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
json 包实现了json对象的编解码
- 获取v变量的json编码
- 将json编码的数据存入到解析v变量中
- 如何实现延时解析
- 实现标准HTML转义
- 实现json字符串格式缩进和前缀
- 剔除编码后数据中的空白字符
- 结构体json编码选项应用
获取v变量的json编码
func Marshal(v interface{}) ([]byte, error)
package mainimport ("encoding/json""fmt""log"
)type User struct {Name stringAge int64
}func main() {user := User{"酷走天涯",27}b,error:=json.Marshal(user)if error != nil {log.Fatal(error)}fmt.Println(string(b))
}
将json编码的数据存入到解析v变量中
func Unmarshal(data []byte, v interface{}) error
package main
import ("encoding/json""fmt""log"
)type User struct {Name stringAge int64
}func main() {data := []byte(`{"Name":"酷走天涯","Age":27}`)var user *Usererror:=json.Unmarshal(data,&user)if error != nil {log.Fatal(error)}fmt.Println(user)
}
如何实现延时解析
package mainimport ("encoding/json""fmt""log"
)type Animal struct {Kind stringData json.RawMessage
}type Dog struct{Name string
}
type Sheep struct{Name stringAge int
}func main() {data := []byte(`[{"Kind":"Dog","Data":{"Name":"小黄"}},{"Kind":"Sheep","Data":{"Name":"小绵阳","Age":12}}]`)// 第一层转换数据var animals *[]Animalerror:=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)
}
实现标准HTML转义
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 mainimport ("encoding/json""bytes""fmt"
)func main() {data := []byte(`<div>这个是html标签</div>`)var buffer bytes.Bufferjson.HTMLEscape(&buffer,data)fmt.Println(buffer.String())
}
实现json字符串格式缩进和前缀
func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error)
func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error
package mainimport ("encoding/json""fmt"
)
func main() {data := []map[string]string {{"name":"小黄"},{"name":"小白"}}result,_:=json.MarshalIndent(data,"=","\t")fmt.Println(string(result))
}
剔除编码后数据中的空白字符
func Compact(dst *bytes.Buffer, src []byte) error
package mainimport ("encoding/json""fmt""bytes"
)func main() {data := []map[string]string { {"name": "小黄"},{"name": "小白"}}src,_ := json.MarshalIndent(data,"","\t")var buf bytes.Bufferjson.Compact(&buf,src)fmt.Println(string(src))fmt.Println(buf.String())
}
结构体json编码选项应用
- 忽略字段 (Field int
json:"-"
) - 修改编码后的键值名(Field int
json:"myName"
) - 字段空值忽略编码(Field int
json:"myName,omitempty"
) - 设置默认值,如果值为空,则忽略(Field int
json:",omitempty"
) - 格式转换 (Int64String int64
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))}
这篇关于encoding/json的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!