Ist es möglich, einen Fehler zu generieren, wenn ein Feld in json beim Abmapshalling in Golang nicht gefunden wurde? Ich konnte es in der Dokumentation nicht finden. Gibt es ein Tag, das das Feld als erforderlich angibt?Unmarshaling Json in Golang: Pflichtfeld?
28
A
Antwort
34
Im Paket encoding/json
ist kein Tag vorhanden, das ein Feld auf "erforderlich" setzt. Sie müssen entweder Ihre eigene MarshalJSON()
-Methode schreiben oder eine Nachprüfung nach fehlenden Feldern durchführen.
für fehlende Felder zu überprüfen, müssen Sie Zeiger verwenden, um zwischen fehlenden/null und Null-Werte zu unterscheiden:
type JsonStruct struct {
String *string
Number *float64
}
Vollarbeitsbeispiel:
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
Sie können das Unmarshalling auch für einen bestimmten Typ überschreiben (also ein erforderliches Feld, das in einigen Json-Layern verborgen ist), ohne das Feld zu einem Zeiger zu machen.
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
}
Verwandte Themen
- 1. Unmarshaling (JSON) in Apache Kamel
- 2. Analysieren eines Unterabschnitts von JSON in Golang
- 3. Speichern Golang JSON in Postgresql
- 4. Json Decodier-/unmarshal in golang
- 5. JSON-Wert in String in Golang dekodieren
- 6. Golang modifizieren Json ohne Struktur
- 7. Golang Rückkehr Kleinbuchstaben Json Schlüssel
- 8. Golang JSON in Vorlage direkt verwenden
- 9. Golang: Unmarshal JSON Objektergebnis in leerer Karte
- 10. Marshall und unmarshall JSON Inhalt in golang
- 11. Golang: Router config in JSON-Datei
- 12. Angular Validation Pflichtfeld CSS
- 13. Pflichtfeld Validator nicht funktioniert
- 14. Bootstrap-Formular Pflichtfeld
- 15. in golang
- 16. Solr 4 - fehlt Pflichtfeld: Uuid
- 17. Pflicht und NON-Pflichtfeld in SQL
- 18. Pflichtfeld in VB und speichern Button
- 19. Golang - Array/Map zu JSON konvertieren
- 20. Golang JSON/HTTP Anfrage wie curl
- 21. ASP.NET Pflichtfeld Validator arbeitet nicht
- 22. golang Struktur für json mit beliebigen Schlüsseln
- 23. Golang eine json mit DYNAMIC Schlüssel
- 24. Golang und JSON mit Array von struct
- 25. Komplexes JSON-Marshalling zu GoLang-Objekten
- 26. Golang JSON omitemperty Mit time.Time Feld
- 27. Golang Json Abstellungs numerisch mit Exponenten
- 28. Golang JSON Struktur zu Klein funktioniert nicht
- 29. Wie konvertiert man [] Byte XML in JSON Ausgabe in Golang
- 30. Griff optional JSON Feld in HTTP-Anforderung Körper in Golang
Oder Sie könnten einfach nach dem Standardwert suchen, der für die meisten Fälle ausreichen könnte (es sei denn, Sie arbeiten mit Zahlen). – Matt3o12
Aber was, wenn der Wert des "erforderlichen Feldes" der Standardwert ist? – AJPennster
Wenn das erforderliche Feld einer Zahl 0 sein kann und Sie auch überprüfen müssen, ob es angegeben ist, verwenden Sie stattdessen string's, um zu überprüfen, dass keine Eingabe erfolgt, und konvertieren Sie dann die Zeichenfolge in eine Zahl nach. – Zanven