JSON解析
1、一个结构体正常序列化过后
type Product struct {
Name string
ProductID int64
Number int
Price float64
IsOnSale bool
}
2、tag标签,给结构体的每个字段打上一个标签,标签冒号前是类型,后面是标签名。
type Product struct {
Name string `json:"name"`
ProductID int64 `json:"-"` // 表示不进行序列化
Number int `json:"number"`
Price float64 `json:"price"`
IsOnSale bool `json:"is_on_sale,string"`
}
3、omitempty,tag里面加上omitempy,可以在序列化的时候忽略0值或者空值
type Product struct {
Name string `json:"name"`
ProductID int64 `json:"product_id,omitempty"`
Number int `json:"number"`
Price float64 `json:"price"`
IsOnSale bool `json:"is_on_sale,omitempty"`
}
4、type,有些时候,我们在序列化或者反序列化的时候,可能结构体类型和需要的类型不一致,这个时候可以指定,支持string,number和boolean
type Product struct {
Name string `json:"name"`
ProductID int64 `json:"product_id,string"`
Number int `json:"number,string"`
Price float64 `json:"price,string"`
IsOnSale bool `json:"is_on_sale,string"`
}
func main() {
p := &Product{}
p.Name = "Xiao mi 6"
p.IsOnSale = true
p.Number = 10000
p.Price = 2499.00
p.ProductID = 1
data, _ := json.Marshal(p)
fmt.Println(string(data))
}
XML解析
import (
"encoding/xml"
"os"
"io/ioutil"
"fmt"
"io"
)
type Recurlyservers struct {
XMLName xml.Name `xml:"servers"`
Version string `xml:"version,attr"`
Svs []server `xml:"server"`
Description string `xml:",innerxml"`//原样输出xml内容
}
type server struct {
XMLName xml.Name `xml:"server"`
ServerName string `xml:"serverName"`
ServerIP string `xml:"serverIP"`
}
//解析XML文件
func ParseXML(){
file, err := os.Open("./xml/test.xml") // For read access.
if err != nil {
fmt.Printf("error: %v", err)
return
}
defer file.Close()
data, err := ioutil.ReadAll(file)
if err != nil {
fmt.Printf("error: %v", err)
return
}
v := Recurlyservers{}
err = xml.Unmarshal(data, &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Println(v)
}
//生成XML文件
func MakeXML(){
v := &Servers{Version: "1"}
v.Svs = append(v.Svs, server2{"Shanghai_VPN", "127.0.0.1"})
v.Svs = append(v.Svs, server2{"Beijing_VPN", "127.0.0.2"})
output, err := xml.MarshalIndent(v, " ", " ")
if err != nil {
fmt.Printf("error: %v\n", err) }
os.Stdout.Write([]byte(xml.Header))
os.Stdout.Write(output)
f, _ := os.Create("./test.xml")
io.WriteString(f, xml.Header)
io.WriteString(f, string(output))
}
type Servers struct {
XMLName xml.Name `xml:"servers"`
Version string `xml:"version,attr"`
Svs []server2 `xml:"server"`
}
type server2 struct {
ServerName string `xml:"serverName"`
ServerIP string `xml:"serverIP"`
}