ホームページ >バックエンド開発 >Golang >JSON デシリアライゼーションでインターフェイス アサーション エラーがスローされるのはなぜですか?

JSON デシリアライゼーションでインターフェイス アサーション エラーがスローされるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-27 06:41:09351ブラウズ

Why Does My JSON Deserialization Throw an Interface Assertion Failure?

JSON 逆シリアル化中のインターフェイス アサーション エラー

問題:

後で特定の構造体型へのインターフェイスをアサートしようとしたとき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 サイトの他の関連記事を参照してください。

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