首頁  >  文章  >  後端開發  >  golang:也有方法的 json 數組

golang:也有方法的 json 數組

WBOY
WBOY轉載
2024-02-09 10:15:181224瀏覽

golang:也有方法的 json 数组

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有一個包含parentparent。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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除