Laut der Einführung des PHP-Editors Zimo wird der Zeigerwert beim Parsen von JSON-Daten durch json.Unmarshal in Golang nicht explizit auf Null gesetzt, wenn ein Feld im JSON nicht vorhanden ist. Das bedeutet, dass der Zeiger auch dann seinen ursprünglichen Wert behält, wenn ein Feld im JSON fehlt, was möglicherweise zu Fehlern oder Ausnahmen in Ihrem Programm führt. Daher müssen wir bei der Verwendung von json.Unmarshal besonderes Augenmerk auf den Umgang mit fehlenden Feldern legen, um die Stabilität und Korrektheit des Programms sicherzustellen.
Betrachten Sie dieses Beispiel:
<code>package main import ( "encoding/json" "fmt" ) type InternalStructFirst struct { Field string `json:"field"` } type ExternalStruct struct { StructA InternalStructFirst `json:"struct_a"` StructB *InternalStructFirst `json:"struct_b"` } func main() { var structVar ExternalStruct string1 := "{\"struct_a\":{\"field\":\"a\"},\"struct_b\":{\"field\":\"b\"}}" json.Unmarshal([]byte(string1), &structVar) fmt.Printf("first: %+v %+v\n", structVar.StructA, structVar.StructB) string2 := "{\"struct_a\":{\"field\":\"c\"}}" json.Unmarshal([]byte(string2), &structVar) fmt.Printf("second: %+v %+v\n", structVar.StructA, structVar.StructB) var structVar2 ExternalStruct json.Unmarshal([]byte(string2), &structVar) fmt.Printf("third: %+v %+v\n", structVar2.StructA, structVar2 } </code>
Was ergibt:
first: {Field:a} &{Field:b} second: {Field:c} &{Field:b} third: {Field:} <nil>
Wenn ich json.Unmarshal
zum ersten Mal ausführe, erscheint StructB in der Antwort und wird ordnungsgemäß entmarshallt. Aber wenn ich das ein zweites Mal mache, scheint es nicht explizit auf Null gesetzt zu werden, wenn das Feld nicht in der Antwort angezeigt wird. Wenn Sie dies für eine Struktur tun, in der dieses Feld nicht festgelegt ist, wird es auf Null gesetzt (oder anscheinend nicht auf etwas gesetzt) (wie im dritten Beispiel gezeigt).
Wenn ich struct_b
auf ungleich Null gesetzt habe, wie kann ich mein Beispiel so ändern, dass beim Parsen einer JSON-Zeichenfolge, die kein struct_b
-Feld enthält, das zweite struct_b
设置为非 nil,如何更改我的示例,以便在解析其中不包含 struct_b
字段的 JSON 字符串时,第二个 json.Unmarshal
将显式将 StructB
设置为 nil ?
你不能。 json.Unmarshal
不会修改输入 JSON 中未表示的结构字段。要么使用空结构开始,要么在调用 Unmarshal
dies tut? StructB
explizit auf Null setzen?
Unmarshal
aufrufen, wenn sie nicht in der JSON-Eingabe enthalten sind. 🎜Das obige ist der detaillierte Inhalt vonGolangs json.Unmarshal setzt einen Zeigerwert nicht explizit auf Null, wenn das Feld im JSON nicht vorhanden ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!