Go語言中的JSON包非常實用,能夠讓我們快速的將一個Go對象轉換成JSON格式的數據,或者將JSON數據轉換成Go對象。
但是有時候我們想要對JSON數據進行定制化,通過一些小技巧來達到自定義JSON格式的目的。下面是一個例子:
type person struct { Name string `json:"name"` } func (p person) MarshalJSON() ([]byte, error) { return []byte(fmt.Sprintf("{\"name\":\"%s is great\"}", p.Name)), nil } func main() { me := person{Name: "Alice"} jsonBytes, _ := json.Marshal(me) fmt.Println(string(jsonBytes)) }
上述例子中,我們定義了一個Person結構體,希望將其轉換成JSON格式數據,并且需要在name字段后添加“is great”的描述。為了實現這個目標,我們會用到MarshalJSON()方法。
MarshalJSON()是JSON包中的一個方法,用于在轉換過程中對JSON數據進行修改。在上面的例子中,我們在其中定義了自己的MarshalJSON()方法,將Person對象轉換成了字符串。
在代碼中,我們先調用了fmt.Sprintf()函數來構造一個字符串,并在其中添加了我們自定義的描述信息。隨后,將轉換后的字符串打包成字節數組返回即可。
最后,在main()函數中調用json.Marshal()方法轉換完整的Person對象,并將其轉換成字符串輸出。
這就達到了我們自定義JSON格式的目的。
上一篇go正則表達式json