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 サイトの他の関連記事を参照してください。