Golang で「アンマーシャリングできません...」エラーを解決するにはどうすればよいですか?

WBOY
リリース: 2023-06-24 20:01:59
オリジナル
4307 人が閲覧しました

Golang の開発プロセスでは、データ交換とシリアル化に JSON を使用することがよくあります。ただし、JSON データを構造体に逆シリアル化しようとすると、「アンマーシャリングできません...」エラーが発生することがあります。このエラー メッセージは不可解で、理解するのが難しく、混乱を招きます。この記事は、このエラーの原因を理解し、いくつかの解決策を提供するのに役立ちます。

解決策 1: 構造体のメンバー変数の型を確認する

「アンマーシャルできません...」エラーは、通常、JSON 文字列の値と構造体のメンバー変数の型の不一致によって発生します。構造体のメンバ変数です。このエラーを回避するには、構造体を宣言するときに、各メンバー変数の型が JSON 内の対応する値と一致することを確認する必要があります。

たとえば、次の構造を定義します:

type Person struct {
    Name string
    Age  int
}
ログイン後にコピー

次の JSON を構造に逆シリアル化しようとすると、「アンマーシャルできません...」エラーが発生します:

{
    "Name": "Lucy",
    "Age": "28"
}
ログイン後にコピー

これは、JSON の Age 値の型が文字列であり、構造内の Age メンバー変数の型 int と一致できないためです。 JSON データを正しく逆シリアル化するには、Age のタイプを文字列として定義する必要があります。

解決策2:構造体のメンバ変数のタグを確認する

通常、構造体のメンバ変数にフィールドのタグ(タグ)を定義しておけば、そのタグの情報が反映されます。シリアル化中に JSON データをガイドし、各フィールドの名前とその他の詳細を識別します。そのため、JSONをデシリアライズする際に、タグ情報がJSONデータの属性名と一致しない場合にも、このエラーが発生する可能性があります。

たとえば、次の構造を定義します:

type Person struct {
    Name string `json:"PersonName"`
    Age  int    `json:"PersonAge"`
}
ログイン後にコピー

次の JSON を構造に逆シリアル化しようとすると、「アンマーシャルできません...」エラーも発生します:

{
    "Name": "Lucy",
    "Age": 28
}
ログイン後にコピー

これは、構造内の Name フィールドと Age フィールドにラベルを定義しており、ラベルに定義されているフィールド名が JSON データの属性名と一致していないためです。したがって、正しく逆シリアル化するには、JSON データの属性名を構造内で定義されたタグ名に変更する必要があります。

解決策 3: アノテーションに golang 独自の json パッケージを使用する

もう 1 つの方法は、golang 独自の json パッケージを使用して、アノテーションによる「アンマーシャルできません…」エラーを防ぐことです。この方法では、以下に示すように、構造を定義するときに各フィールドに json タグを追加する必要があります。

type Person struct {
    Name string `json:"name"`
    Age int `json:"age"`
}
ログイン後にコピー

JSON を逆シリアル化するときは、コード内で json.Unmarshal メソッドを使用し、JSON データを入力として追加する必要があります。このようにして、JSON データを正しく逆シリアル化できます。次に例を示します。

p := &Person{}
jsonData := []byte(`{"name":"John","age":18}`)
err := json.Unmarshal(jsonData, p)
if err != nil {
    fmt.Println("Unmarshal error: ", err)
}
fmt.Printf("Name: %s, Age: %d", p.Name, p.Age)
ログイン後にコピー

まとめ

ほとんどの場合、「アンマーシャリングできません...」エラーは、通常、次のタイプと構造が原因です。 JSONデータ 本体のメンバー変数の型の不一致、またはJSONデータ内のタグ情報と属性名の不一致が原因で発生します。これらの問題を注意深く確認することで、このエラーを回避できます。このエラーをより適切に解決したい場合は、注釈管理に Golang 独自の json パッケージを使用してください。

以上がGolang で「アンマーシャリングできません...」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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