golang 是一種靜態類型的編程語言,它的 json 包為我們提供了很好的 json 序列化和反序列化的能力,而且對于復雜的 json 對象,我們還可以使用子對象進行更加靈活的操作。
type Person struct { Name string Age int Address Address } type Address struct { Country string City string } func main() { p := Person{ Name: "John", Age: 30, Address: Address{ Country: "USA", City: "San Francisco", }, } b, _ := json.Marshal(p) fmt.Println(string(b)) }
在上面的例子中,我們定義了一個 Person 結構體,并且包含了 Address 子結構體。我們對 Person 結構體進行 json 序列化,并輸出字符串。輸出的結果如下:
{ "Name": "John", "Age": 30, "Address": { "Country": "USA", "City": "San Francisco" } }
我們可以看到,當一個結構體中包含了子結構體,序列化后的 json 字符串中會將子結構體看作一個子對象進行輸出。
如果我們要對 json 字符串進行反序列化操作,也可以使用子結構體進行更加靈活的處理:
func main() { str := `{ "Name": "John", "Age": 30, "Address": { "Country": "USA", "City": "San Francisco" } }` var p Person json.Unmarshal([]byte(str), &p) fmt.Println(p.Name, p.Age, p.Address.Country, p.Address.City) }
在上面的例子中,我們將一個 json 字符串反序列化為 Person 結構體,然后通過訪問 Person 結構體中的子結構體 Address 的成員,可以實現對復雜 json 對象的便捷訪問。
總之,在 golang 中,json 子對象提供了非常方便的 json 序列化和反序列化操作,讓我們能夠更加靈活地操作復雜的 json 對象。