Java如何為 PPT 中的圖形新增陰影效果
阿新 • • 發佈:2020-09-18
1、解析時,結構體的Tag使用
tag就是標籤,給結構體的每個欄位打上一個標籤,標籤冒號前是型別,後面是標籤名;
- json解析時用 json,同時注意bson,bson用於mongdb的儲存解析
-omitempty,可以在序列化的時候忽略0值或者空值
-type,在序列化或者反序列化的時候,可能結構體型別和需要的型別不一致,這個時候可以指定型別,支援string,number和boolean
1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 ) 7 8 9 type Product struct{ 10 Name string `json:"name"` 11 ProductID int64 `json:"-"` // 該欄位不進行序列化 12 Number int `json:"number"` 13 Price float64 `json:"price,omitempty"` //忽略0值或空值 14 IsOnSale bool `json:"is_on_sale,string"` //設定轉化的type 支援string,number和boolean 15 } 16 17 18 func main() {19 20 21 var data = `{"name":"Xiao mi","product_id":"10","number":10000,"price":0,"is_on_sale":"true"}` 22 p := &Product{} 23 err := json.Unmarshal([]byte(data), p) 24 fmt.Println(err) 25 fmt.Println(*p) 26 Serialization,_ := json.Marshal(p) 27 fmt.Println(string(Serialization))28 29 }
2、自定義解析,常用於定製化校驗
- gin 框架中,ShouBindJson也有類似功能,可直接定義tag,或自定義解析
1 package main 2 3 import ( 4 "encoding/json" 5 "errors" 6 "fmt" 7 ) 8 9 type Marshaler interface { 10 MarshalJSON() ([]byte, error) 11 } 12 type Unmarshaler interface { 13 UnmarshalJSON() ([]byte, error) 14 } 15 16 //實現以上介面,介面的方法只是對結構體欄位的值做處理。 17 // 在序列化與反序列化時json.Marshal和json.Unmarshal,會進行呼叫,可以理解為攔截器 18 //即在序列化和反序列化前增加額外邏輯 19 20 type Phone struct { 21 Number string 22 } 23 24 25 func (p Phone) MarshalJSON() ([]byte, error) { 26 //檢查 27 if len(p.Number) != 11 { 28 return nil,errors.New("not fit rule") 29 } 30 for _,v := range p.Number { 31 if v > '9' || v < '0'{ 32 return nil,errors.New("Contains non-digits") 33 } 34 } 35 //注意只是對欄位值處理 36 return json.Marshal(p.Number) 37 } 38 39 40 41 func main() { 42 phone := Phone{"1980987578"} 43 phoneJsson,err := json.Marshal(phone) 44 fmt.Println(string(phoneJsson),err) 45 }