php小編柚子為您帶來了一篇關於Golang的文章,主題是「golang:也有方法的 json 陣列」。 Golang是一門簡潔有效率的程式語言,而json陣列則是常用的資料格式之一。本文將探討如何在Golang中對json陣列進行操作,並介紹了一些有用的方法。無論您是初學者還是有一定經驗的開發者,本文都能為您提供一些有價值的資訊和技巧。讓我們一起來了解一下吧!
我有一個這樣的資料結構:
type ( parent struct { items []*child } child struct { field string `json:"field"` } )
我也希望 parent
有方法:
func (p *parent) example() { }
但是 json 要求是父級只是一個陣列:
[ { "field": "data" } ]
我希望 parent
是一個簡單的數組,但為了讓 parent
有方法,它不能是數組類型。
有沒有辦法用一種資料結構來解決這兩個問題?
(讓事情變得更複雜,我必須使用的實際資料結構有兩個層級:greatgrandparent
包含[]grandparent
,而grandparent
有一個包含parent
的parent
。json結構是外部定義的,陣列沒有鍵名稱,我想要四個結構中的每一個都有方法。)
為了讓父級有方法,它不能是陣列型別。
它可以,它只是必須有一個名稱,因為只有命名類型(或指向命名類型的指標)可以實現方法。以下是有效的 go 程式碼:
type parent []*child func (p parent) example() { /* ... */ }
注意,上面的 parent
是一個切片而不是一個陣列。 go 中的陣列有靜態長度,你不能增加它們,也不能縮小它們,另一方面,切片具有動態長度,你可以隨意調整它們的大小。數組和切片密切相關,但並不相同。
另一種方法是讓結構類型實作 json.unmarshaler
/json.marshaler
介面:
type parent struct { Items []*child } func (p *parent) UnmarshalJSON(data []byte) error { return json.Unmarshal(data, &p.Items) } func (p parent) MarshalJSON() ([]byte, error) { return json.Marshal(p.Items) }
上面將產生所需的 json 結構。
以上是golang:也有方法的 json 數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!