Heim >Backend-Entwicklung >Golang >Golang unregelmäßige JSON-Analyse
json.Unmarshal Das Operationsobjekt ist ein []Byte, was bedeutet, dass das gesamte verarbeitete JSON in den Speicher geladen werden muss.
Wenn JSON geladen ist, ist die Verwendung von json.Unmarshal schneller. (Empfohlen zu lernen: go)
json.Decoder betreibt einen Stream oder andere Typen, die das implementieren io.Reader-Schnittstelle. Das heißt, es kann beim Empfang oder bei der Übertragung analysiert werden. Bei der Verarbeitung einer größeren Datenmenge ist es nicht erforderlich, den gesamten JSON-Code erneut in den Speicher zu kopieren.
Die beste Wahl ist wie folgt:
Wenn die Daten von einem io.Reader stammen oder Daten aus einem Stream lesen müssen, wählen Sie json.Decoder
Wenn der gesamte JSON in den Speicher geladen wurde, verwenden Sie json.Unmarshal
Analyse unbestimmter Typen
Manchmal, wenn Sie auf JSON mit unsicheren Feldern stoßen, benötigen Sie Judge und gleichzeitig analysieren. Beispiel:
t1 := `{"type":"a", id:"aaa"}`t2 := `{"type":"b", id:22222}`
Unmarshal to interface{}
Sie können zuerst unmarshal to interface{} und dann die Schlüsselfelder vor der weiteren Verarbeitung bestimmen.
type Data struct { Type string `json:"type"` Id interface{} `json:"id"`}func decode(t string) { var x Data err := json.Unmarshal([]byte(t), &x) if err != nil { panic(err) } if x.Type == "a" { fmt.Println(x.Id.(string)) } else { fmt.Println(x.Id.(float64)) //json解析中number默认作为float64解析 } }func main() { t1 := `{"type":"a", "id":"aaa"}` t2 := `{"type":"b", "id":22222}` decode(t1) decode(t2) }
Ergebnis
aaa 22222
Das obige ist der detaillierte Inhalt vonGolang unregelmäßige JSON-Analyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!