ホームページ  >  記事  >  バックエンド開発  >  問題と解決策に焦点を当てた、いくつかのタイトルのオプションを次に示します。 **直接の質問

問題と解決策に焦点を当てた、いくつかのタイトルのオプションを次に示します。 **直接の質問

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-25 11:43:02331ブラウズ

Here are a few title options, focusing on the problem and solution:

**Direct Question

構造体とマップへの JSON デコード

説明したシナリオでは、アプリケーションは、JSON に一致する構造体を含むインターフェースを受け取ります。{}構造体をバイト配列として受け取ります。ただし、JSON デコードすると、結果は予期された構造体ではなくマップになります。

この動作は、json.Unmarshal がポインターを処理する方法によるものです。もともと構造体を保持していたインターフェースを参照することにより、デコード プロセスは基礎となる型を判断できなくなります。{}その結果、目的の構造体の代わりに単純なマップが返されます。

この問題を修正するには、次の 2 つのアプローチが考えられます。

1.インターフェイスの直接キャスト:

構造体へのポインターを抽象インターフェイスとして json.Unmarshal に直接渡します:

<code class="go">var ping interface{} = &Ping{}
deserialize([]byte(`{"id":42}`), ping)</code>

2.リフレクションベースのポインター作成:

構造体への直接ポインターが使用できない場合は、リフレクションを利用して新しいポインターを作成し、そのポインターに逆シリアル化し、値をコピーして戻します:

<code class="go">var ping interface{} = Ping{}
nptr := reflect.New(reflect.TypeOf(ping))
deserialize([]byte(`{"id":42}`), nptr.Interface())
ping = nptr.Interface()</code>

これらのアプローチのいずれかを採用することで、デコード プロセスで基礎となる構造体を正確に識別し、JSON データからそのフィールドにデータを設定できます。

以上が問題と解決策に焦点を当てた、いくつかのタイトルのオプションを次に示します。 **直接の質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。