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. かの必須フィールド空
- 3. Golang JSON omitempty with time.Timeフィールド
- 4. jqueryアコーディオン内の必須フィールド
- 5. Django RESTフレームワーク: "このフィールドは必須です。" with必須= Falseおよびunique_together
- 6. JSF検証必須フィールド
- 7. Fedex Shipping Label API必須フィールド
- 8. OutputPathはすべてのPropertyGroupの必須フィールドですか?
- 9. mongoengineのドキュメントから必須フィールドを取得しますか?
- 10. jqgrid:add-formで必須フィールドですが、edit-formでは必須ではありませんか?
- 11. 必須フィールドのサーバー側の検証
- 12. 必須フィールドの表記方法
- 13. virtuemartの必須入力フィールドのフォームに星を追加する
- 14. Google Compute Engineのオートスケーラリソースを使用するリクエストの必須フィールド
- 15. Django:必須ですか?
- 16. Infinispan.xmlは必須ですか?
- 17. main.cppは必須ですか?
- 18. Djangoでは、 "このフィールドは必須です"をどのように変更するのですか? 「名前は必須ですか?」
- 19. xsd:enumerationタグを必須/必須にすることはできますか?
- 20. abas-ERP(FO- Language)/ AJO:画面の必須フィールドを取得する
- 21. Docusignの決定に基づいてフィールドを必須にする
- 22. Django REST Framework PATCHが必須フィールドで失敗する
- 23. コード化は入力フィールドから「必須」を無視します
- 24. <select>フィールドを必須にしますか?
- 25. 動的に生成される必須フィールドを検証する
- 26. Asp.net必須フィールド検証問題
- 27. Springセキュリティ標準テーブルフィールドとHibernate必須フィールド
- 28. Metasearch必須フィールドを無効にする方法は?
- 29. 条件付き必須フィールドを追加する方法は?
- 30. CrmServiceを使用しているときに更新する際に必須のフィールドが必要ですか?
または、ほとんどの場合(数字を使用している場合を除き)、デフォルト値で十分かもしれません。 – Matt3o12
"必須フィールド"の値がデフォルト値の場合はどうなりますか? – AJPennster
数字の必須フィールドが0になる可能性がある場合は、その文字列が存在するかどうかを確認し、文字列を使用して入力がないかどうかを確認してから文字列を数字に変換します。 – Zanven