首頁  >  文章  >  後端開發  >  如何將帶有任意鍵/值對的 JSON 解組到 Go 結構中?

如何將帶有任意鍵/值對的 JSON 解組到 Go 結構中?

Susan Sarandon
Susan Sarandon原創
2024-10-30 06:45:28983瀏覽

How Can I Unmarshal JSON with Arbitrary Key/Value Pairs into a Go Struct?

使用任意鍵/值對將JSON 解組到結構

問題陳述

目標是解組包含已知組合的JSON 字串和未知的鍵/值對到Go 結構中。已知字段應解組到特定的結構體字段,而未知字段應儲存為結構體中鍵/值對的集合。

解決方案

要實現此目的,結構體可以使用已知字段和映射切片的組合來定義:

<code class="go">type Message struct {
    Known1 string `json:"known1"`
    Known2 string `json:"known2"`
    Unknowns []map[string]interface{}
}</code>

解組過程

此JSON 字串:

<code class="json">{"known1": "foo", "known2": "bar", "unknown1": "car", "unknown2": 1}</code>

可以使用以下方式解組步驟:

  1. 建立Message 結構體的實例。
  2. 將 JSON 字串解組到結構中。
  3. 解組後迭代原始 JSON 物件並提取未知欄位的鍵和值。
  4. 將每個未知鍵/值對儲存在新映射中,並將其附加到結構中的 Unknowns 欄位。

替代解決方案

或者,不使用結構體,可以將JSON 直接解組到map[string]interface{},這將提供對所有鍵/值對作為動態集合的存取。

<code class="go">var msg map[string]interface{}
json.Unmarshal([]byte(jsonMsg), &msg)</code>

結論

使用結構體還是映射的選擇取決於應用程式的特定要求。如果需要預先定義的已知欄位和結構化方法,則結構體是合適的。如果事先不知道未知欄位的確切性質,或需要更靈活的動態資料結構,則地圖是可行的選擇。

以上是如何將帶有任意鍵/值對的 JSON 解組到 Go 結構中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn