Golangでアンマーシャリングしているときにフィールドがjsonで見つからなかった場合は、エラーを生成できますか?私はドキュメンテーションでそれを見つけることができませんでした。必要に応じてフィールドを指定するタグはありますか?Golangのjsonをアンマーシャリングする:必須フィールドですか?
28
A
答えて
34
encoding/json
パッケージにフィールドが「必須」に設定されているタグはありません。あなた自身のMarshalJSON()
メソッドを書かなければならないか、欠落しているフィールドのポストチェックをしなければなりません。不足している分野をチェックするために
、あなたが/不足している、ヌルとゼロ値とを区別するためにポインタを使用する必要があります:
type JsonStruct struct {
String *string
Number *float64
}
全作業例:
package main
import (
"fmt"
"encoding/json"
)
type JsonStruct struct {
String *string
Number *float64
}
var rawJson = []byte(`{
"string":"We do not provide a number"
}`)
func main() {
var s *JsonStruct
err := json.Unmarshal(rawJson, &s)
if err != nil {
panic(err)
}
if s.String == nil {
panic("String is missing or null!")
}
if s.Number == nil {
panic("Number is missing or null!")
}
fmt.Printf("String: %s Number: %f\n", *s.String, *s.Number)
}
2
フィールドをポインタにする必要なしに、特定のタイプのアンマーシャリングをオーバーライドすることもできます(いくつかのjsonレイヤに埋め込まれた必須フィールド)。
type EnumItem struct {
Named
Value string
}
func (item *EnumItem) UnmarshalJSON(data []byte) (err error) {
required := struct {
Value *string `json:"value"`
}{}
all := struct {
Named
Value string `json:"value"`
}{}
err = json.Unmarshal(data, &required)
if err != nil {
return
} else if required.Value == nil {
err = fmt.Errorf("Required field for EnumItem missing")
} else {
err = json.Unmarshal(data, &all)
item.Named = all.Named
item.Value = all.Value
}
return
}
関連する問題
- 1. JSONスキーマ:必須フィールド
- 2. JSONスキーマ:必須フィールドのXOR
- 3. "Variation"は必須フィールドです
- 4. ScapholdSchemaの必須フィールドは何ですか?
- 5. GolangのキーレスJSON配列をアンマーシャリングする方法は?
- 6. 必須フィールド
- 7. かの必須フィールド空
- 8. コードファースト - 非必須フィールドが必要です
- 9. androidの必須フィールド
- 10. はgolangでJSONのアンマーシャリングのNULL可能オブジェクトを取得
- 11. アラートブロック「必須フィールド」ポップアップ
- 12. JSONデータと表示を必須フィールドにまとめます
- 13. flatc validateは指定されたJSONのFlatbufferスキーマの必須フィールドですか?
- 14. インポート時にフィールドを必須にする
- 15. ログインページの必須フィールドのフローティングラベル
- 16. 必須フィールドのハイライトドロップダウン値
- 17. jqueryアコーディオン内の必須フィールド
- 18. JavaScriptの必須フィールドとリダイレクト
- 19. ユニットテストの必須フィールドc#
- 20. Djangorestフレームワーク。ビューセットの必須フィールド
- 21. 必須フィールド必須ではないバナーkentico 9
- 22. Django RESTフレームワーク: "このフィールドは必須です。" with必須= Falseおよびunique_together
- 23. OutputPathはすべてのPropertyGroupの必須フィールドですか?
- 24. 角度フォームビルダオプション必須フィールド
- 25. JSF検証必須フィールド
- 26. Fedex Shipping Label API必須フィールド
- 27. Azure B2C SignUpポリシー必須フィールド
- 28. JD Edwardsテーブル必須フィールド
- 29. ADFバリデーションと必須フィールド
- 30. "<f:form.select>"は必須フィールド(必須)にするにはどうすればよいですか?
または、ほとんどの場合(数字を使用している場合を除き)、デフォルト値で十分かもしれません。 – Matt3o12
"必須フィールド"の値がデフォルト値の場合はどうなりますか? – AJPennster
数字の必須フィールドが0になる可能性がある場合は、その文字列が存在するかどうかを確認し、文字列を使用して入力がないかどうかを確認してから文字列を数字に変換します。 – Zanven