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 サイトの他の関連記事を参照してください。