json.Unmarshal は、JSON 文字列の値をデータ構造に設定する多用途関数です。ただし、予想される出力が実際の出力と異なり、結果として得られる構造が意図した構造体ではなくマップになる場合、よくある困惑が生じます。この矛盾を解明するために、コードを詳しく調べて、基礎となるメカニズムを調査します。
この例では、「悪い」関数が ping という名前のインターフェースを Ping 構造体に割り当てています。{}ただし、json.Unmarshal が呼び出されると、具体的な型情報のない抽象インターフェイスが表示されます。その結果、受信した JSON をマップとして解釈し、観察された動作を説明します。
これを修正するには、予期される構造体を json.Unmarshal に明示的に提供する必要があります。これは、インターフェイスを Ping 構造体へのポインタに割り当てることで実現できます。{}この微妙な変更を行うことで、関数が操作する必要のある基になる型を関数に伝えます。あるいは、リフレクションを使用して Ping 構造体への新しいポインターを作成し、そこに逆シリアル化して、値を ping にコピーして戻すこともできます。
これらの変更により、json.Unmarshal 関数は JSON を目的の構造に正常にマーシャリングします。構造体に ping を実行し、不一致を解消し、期待どおりにします。関数の複雑さを理解することで、その機能を利用してデータ構造に確実かつ正確にデータを取り込むことができます。
以上がjson.Unmarshal が構造体ではなくマップを返す場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。