Menurut pengenalan editor PHP Zimo, apabila json.Unmarshal dalam Golang menghuraikan data JSON, jika medan tidak wujud dalam JSON, ia tidak akan menetapkan nilai penunjuk kepada nil secara eksplisit. Ini bermakna walaupun medan tiada daripada JSON, penuding masih akan mengekalkan nilai asalnya, yang berpotensi menyebabkan ralat atau pengecualian dalam program anda. Oleh itu, apabila menggunakan json.Unmarshal, kita perlu memberi perhatian khusus untuk mengendalikan medan yang hilang untuk memastikan kestabilan dan ketepatan program.
Pertimbangkan contoh ini:
<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>
Apakah output:
first: {Field:a} &{Field:b} second: {Field:c} &{Field:b} third: {Field:} <nil>
Apabila saya melaksanakan json.Unmarshal
buat kali pertama, StructB muncul dalam respons dan dibongkar dengan betul. Tetapi apabila saya melakukan ini untuk kali kedua, ia nampaknya tidak menetapkannya secara eksplisit kepada sifar apabila medan tidak ditunjukkan dalam respons. Apabila melakukan ini pada struct yang tidak mempunyai set medan ini, ia menetapkannya kepada nil (atau nampaknya tidak menetapkannya kepada sesuatu) (seperti yang ditunjukkan dalam contoh ketiga).
Jika saya telah menetapkan struct_b
kepada non-nil, bagaimana saya boleh menukar contoh saya supaya apabila menghuraikan rentetan JSON yang tidak mengandungi medan struct_b
, struct_b
设置为非 nil,如何更改我的示例,以便在解析其中不包含 struct_b
字段的 JSON 字符串时,第二个 json.Unmarshal
将显式将 StructB
设置为 nil ?
你不能。 json.Unmarshal
不会修改输入 JSON 中未表示的结构字段。要么使用空结构开始,要么在调用 Unmarshal
kedua akan Tetapkan StructB
secara eksplisit kepada nil?
Unmarshal
jika ia tiada dalam input JSON. 🎜Atas ialah kandungan terperinci json.Unmarshal Golang tidak secara eksplisit menetapkan nilai penunjuk kepada sifar jika medan tidak wujud dalam JSON. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!