首頁 >後端開發 >Golang >Go 的「encoding/json」可以將部分 Unmarshal JSON 打包到 Map 嗎?

Go 的「encoding/json」可以將部分 Unmarshal JSON 打包到 Map 嗎?

DDD
DDD原創
2024-12-29 04:27:13656瀏覽

Can Go's `encoding/json` Package Partially Unmarshal JSON into a Map?

在Go 中將JSON 部分解組到Map

問題:

考慮一個🎜>問題:

考慮一個🎜>問題:

考慮一個場景,其中Go 伺服器接收封裝在帶有鍵/值對的物件中的JSON 資料。每個鍵對應一個特定類型的值,伺服器需要根據鍵將值解組為適當的結構類型。問題是,可以使用“encoding/json”套件來實現嗎?

解決方案:
import (
    "encoding/json"
    "fmt"
)

func main() {
    data := []byte(`{"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},"say":"Hello"}`)

    var objmap map[string]json.RawMessage
    err := json.Unmarshal(data, &objmap)
    if err != nil {
        // Handle error
    }

    // Example: Unmarshal sendMsg value into a struct
    type sendMsg struct {
        User string
        Msg  string
    }

    var s sendMsg
    err = json.Unmarshal(objmap["sendMsg"], &s)
    if err != nil {
        // Handle error
    }
    fmt.Println(s)
}

為了實現這一點,我們可以將JSON 資料部分解組為鍵值對的映射,其中鍵是字串,值是json .RawMessage 實例。 RawMessage 表示未處理的 JSON 數據,讓我們可以進一步解組為特定的結構或類型。

以下是示範程式碼:

範例用法:在上面的範例中,JSON 資料首先被解組為地圖[字串]json.RawMessage。然後,為了解析像 sendMsg 這樣的特定值,我們可以進一步將對應的 RawMessage 解組到程式中定義的結構體中。 這種技術可以靈活且有效率地處理具有多個鍵值對的 JSON 數據,其中值可以根據鍵被解組為不同的類型。

以上是Go 的「encoding/json」可以將部分 Unmarshal JSON 打包到 Map 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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