Umgang mit inkonsistenten JSON-Feldern: Ein Fall von Strings vs. Arrays
Beim Umgang mit JSON-Daten, die nicht vollständig konsistent sind, können Herausforderungen auftreten im Unmarshalling-Prozess. Dies kann auftreten, wenn ein bestimmtes Feld im JSON in seinem Format variiert, was den Unmarshalling-Prozess erschwert.
Das Problem:
Stellen Sie sich das folgende Szenario vor:
type MyListItem struct { Date string `json:"date"` DisplayName string `json:"display_name"` } type MyListings struct { CLItems []MyListItem `json:"myitems"` }
Die JSON-Daten verfügen über ein Feld namens „display_name“, bei dem es sich voraussichtlich um eine Zeichenfolge handelt. In einigen Fällen kann es sich jedoch auch um ein Array aus Zeichenfolgen handeln. Diese Inkonsistenz verkompliziert den Unmarshalling-Prozess und führt zu Fehlern.
Die Lösung:
Um diese Herausforderung zu meistern, können wir zwei Techniken nutzen:
Aktualisiert Code:
type MyListItem struct { Date string `json:"date"` RawDisplayName json.RawMessage `json:"display_name"` DisplayName []string `json:"-"` }
Entmarshalling des JSON:
Unmarshalling des JSON der obersten Ebene:
var li MyListItem if err := json.Unmarshal(data, &li); err != nil { // handle error }
Extrahieren des „DisplayName " Feld abhängig von seiner Typ:
if len(li.RawDisplayName) > 0 { switch li.RawDisplayName[0] { case '"': if err := json.Unmarshal(li.RawDisplayName, &li.DisplayName); err != nil { // handle error } case '[': var s []string if err := json.Unmarshal(li.RawDisplayName, &s); err != nil { // handle error } li.DisplayName = strings.Join(s, "&&") } }
Beispiel:
var listings MyListings if err := json.Unmarshal([]byte(data), &listings); err != nil { // handle error } for i := range listings.CLItems { li := &listings.CLItems[i] if len(li.RawDisplayName) > 0 { switch li.RawDisplayName[0] { case '"': if err := json.Unmarshal(li.RawDisplayName, &li.DisplayName); err != nil { // handle error } case '[': var s []string if err := json.Unmarshal(li.RawDisplayName, &s); err != nil { // handle error } li.DisplayName = strings.Join(s, "&&") } } }
Durch die Anwendung dieser Techniken können Sie inkonsistente JSON-Felder effektiv verarbeiten und so eine ordnungsgemäße Datenextraktion und -bearbeitung in Ihrer Anwendung sicherstellen .
Das obige ist der detaillierte Inhalt vonWie gehe ich mit inkonsistenten JSON-Feldern um: Strings vs. Arrays?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!