ホームページ >バックエンド開発 >Golang >Go で JSON をアンマーシャリングするときに空の値と欠損値を区別するにはどうすればよいですか?

Go で JSON をアンマーシャリングするときに空の値と欠損値を区別するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-04 09:40:15177ブラウズ

How Can I Differentiate Between Empty and Missing Values When Unmarshaling JSON in Go?

Go のアンマーシャリングでの空の値と未指定の値の識別

JSON データを Go 構造体にアンマーシャリングする場合、空の値と欠落している値を区別するのが難しい場合があります価値観。これは、プログラム内でこれらの値を別の方法で処理する場合に特に重要です。

次の例を考えてみましょう:

import (
    "encoding/json"
    "fmt"
)

type Category struct {
    Name        string
    Description string
}

var categories []Category

jsonBlob := []byte(`[
    {"Name": "A", "Description": "Monotremata"},
    {"Name": "B"},
    {"Name": "C", "Description": ""}
]`)

err := json.Unmarshal(jsonBlob, &categories)
if err != nil {
    fmt.Println("error:", err)
}
fmt.Printf("%+v", categories)

この例では、カテゴリ B の [説明] フィールドは空ですが、カテゴリ B の [説明] フィールドは空です。カテゴリ C の説明フィールドが JSON で指定されていません。出力は次のとおりです。

[{Name:A Description:Monotremata} {Name:B Description:} {Name:C Description:}]

ご覧のとおり、これら 2 つのケースを区別することはできません。

解決策

は次のとおりです。フィールドのタイプをポインターに変更することで、空の値と欠損値を区別します。値が空の文字列値を持つ JSON に存在する場合、その値は空の文字列を指すポインターに設定されます。 JSON に存在しない場合は、nil のままになります。

type Category struct {
    Name        string
    Description *string
}

この変更により、出力は次のようになります。

[{Name:A Description:0x1050c150} {Name:B Description:<nil>} {Name:C Description:0x1050c158}]

これで、nil 値を使用して識別できるようになります。フィールドが欠落している場合は、それに応じて処理してください。

以上がGo で JSON をアンマーシャリングするときに空の値と欠損値を区別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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