JSON 逆シリアル化でのインターフェイス アサーション エラー
この状況では、逆シリアル化後にインターフェイスを特定の構造体型にアサートしようとすると問題が発生します。 JSONデータ。エラー メッセージは、予期されるオブジェクト タイプは map[string]interface{} であるが、実際のオブジェクトは Data タイプのカスタム構造体であることを示しています。
説明
インターフェイス アサーションを使用すると、インターフェイス値を特定の型に変換できます。ただし、インターフェイスの基になる値が実際にターゲットの型と一致することを確認することが重要です。この場合、インターフェイス データにはネストされたフィールドを持つ複雑なオブジェクトが含まれていますが、main.Data は単純な構造体です。したがって、Data 型へのアサーションは無効です。
解決策
この問題を解決するには、インターフェイス データがターゲットの構造体と一致することを確認するか、アサーションを実行する前にデータ型を動的にチェックします。
直接逆シリアル化
直接逆シリアル化の場合、次のアプローチを使用できます。
var result Data err := json.Unmarshal(data, &result) if err != nil { // Handle error }
このメソッドは、JSON データを Data 構造体に直接逆シリアル化し、インターフェイス アサーションの必要性を排除します。
インターフェイス チェックとアサーション
あるいは、次の場合インターフェイス アサーションを実行する必要がある場合は、まず基になる値が正しい型であることを確認する必要があります。
result, ok := anInterface.(Data) if !ok { // Handle type mismatch error }
このチェックにより、有効な型変換のみが実行され、ランタイム エラーが防止されます。
以上がJSON 逆シリアル化によりインターフェイス アサーション エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。