JSON 逆シリアル化によりインターフェイス アサーション エラーが発生するのはなぜですか?

Susan Sarandon
リリース: 2024-11-15 07:34:02
オリジナル
435 人が閲覧しました

Why Does My JSON Deserialization Result in an Interface Assertion Failure?

Interface Assertion Failure in JSON Deserialization

In this situation, the issue arises when attempting to assert an interface into a specific struct type after deserializing JSON data. The error message indicates that the expected object type is a map[string]interface{}, but the actual object is a custom struct of type Data.

Explanation

Interface assertions allow the conversion of an interface value to a specific type. However, it's crucial to ensure that the underlying value of the interface actually matches the target type. In this case, the interface data contains a complex object with nested fields, while main.Data is a simple struct. Therefore, the assertion into type Data is invalid.

Solution

To resolve this issue, the approach is to either ensure that the interface data matches the target struct or to dynamically check the data type before performing the assertion.

Direct De-serialization

For direct de-serialization, you can use the following approach:

var result Data

err := json.Unmarshal(data, &result)
if err != nil {
    // Handle error
}
ログイン後にコピー

This method directly de-serializes the JSON data into the Data struct, eliminating the need for interface assertions.

Interface Check and Assertion

Alternatively, if you need to perform an interface assertion, you should first ascertain that the underlying value is of the correct type:

result, ok := anInterface.(Data)
if !ok {
    // Handle type mismatch error
}
ログイン後にコピー

This check ensures that only valid type conversions are performed, preventing runtime errors.

以上がJSON 逆シリアル化によりインターフェイス アサーション エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート