ホームページ > バックエンド開発 > Golang > Go の「encoding/json」パッケージは JSON をマップに部分的にアンマーシャリングできますか?

Go の「encoding/json」パッケージは JSON をマップに部分的にアンマーシャリングできますか?

DDD
リリース: 2024-12-29 04:27:13
オリジナル
650 人が閲覧しました

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

Go で JSON をマップに部分的にアンマーシャリングする

問題:

次のようなシナリオを考えてみましょう。 Go サーバーは、キーと値のペアを持つオブジェクト内にカプセル化された JSON データを受信します。各キーは特定のタイプの値に対応しており、サーバーはキーに従って値を適切な構造体タイプにアンマーシャルする必要があります。問題は、これを「encoding/json」パッケージを使用して実現できるかということです。

解決策:

これを実現するには、JSON データを部分的にアンマーシャリングして、キーと値のペアのマップ。キーは文字列、値は json.RawMessage インスタンスです。 RawMessage は未処理の 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。次に、sendMsg などの特定の値を解析するために、対応する RawMessage をプログラムで定義された構造体にさらにアンマーシャリングできます。

この手法により、複数のキーと値のペアを持つ JSON データを柔軟かつ効率的に処理できます。値は、キーに基づいてさまざまな型にアンマーシャリングできます。

以上がGo の「encoding/json」パッケージは JSON をマップに部分的にアンマーシャリングできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート