問題:
後で特定の構造体型へのインターフェイスをアサートしようとしたときJSON から逆シリアル化すると、インターフェイスが予期したものではないことを示すエラーがスローされますtype.
特定のエラー:
panic: interface conversion: interface {} is map[string]interface {}, not main.Data
詳細:
コードは、JSON データをインターフェイスに逆シリアル化しようとします。次に、インターフェイスを Data 構造体にアサートします。ただし、実行時、Go はインターフェースが Data オブジェクトではなく、map[string]interface{} であることを想定します。
解決策:
適切なインターフェース アサーション:
インターフェイスを任意の構造体型にアサートすることはできません。これらは、インターフェイスが表す正しい型にアサートされる必要があります。この場合、インターフェイスは、最初にその型の値が割り当てられた場合にのみ Data 構造体にアサートできます。
ダイレクト アンマーシャリング:
インターフェイス アサーションの必要性を回避するには、次のようにします。 JSON データを目的の構造体型に直接アンマーシャリングすることをお勧めします。これにより、中間アサーションを必要とせずにデータが適切に変換されることが保証されます。
コード例:
type Data struct { Content string Links []string } func main() { var AData Data // Deserialize JSON directly into the Data struct err = json.Unmarshal([]byte(value), &AData) if err != nil { panic(err) } }
JSON データを AData 構造体に直接アンマーシャリングすることで、インターフェイス アサーションの必要性がなくなり、適切なデータ変換が保証されます。
以上がJSON デシリアライゼーションでインターフェイス アサーション エラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。