Selon l'introduction de l'éditeur PHP Zimo, lorsque json.Unmarshal dans Golang analyse les données JSON, si un champ n'existe pas dans le JSON, il ne définira pas explicitement la valeur du pointeur sur zéro. Cela signifie que même si un champ est absent du JSON, le pointeur conservera toujours sa valeur d'origine, provoquant potentiellement des erreurs ou des exceptions dans votre programme. Par conséquent, lors de l'utilisation de json.Unmarshal, nous devons accorder une attention particulière à la gestion des champs manquants afin de garantir la stabilité et l'exactitude du programme.
Considérez cet exemple :
<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>
Quels résultats :
first: {Field:a} &{Field:b} second: {Field:c} &{Field:b} third: {Field:} <nil>
Lorsque j'exécute json.Unmarshal
pour la première fois, le StructB apparaît dans la réponse et est correctement désorganisé. Mais quand je fais cela une deuxième fois, cela ne semble pas le définir explicitement sur zéro lorsque le champ n'est pas affiché dans la réponse. Lorsque vous effectuez cela sur une structure pour laquelle ce champ n'est pas défini, il le définit sur zéro (ou ne le définit apparemment pas sur quelque chose) (comme indiqué dans le troisième exemple).
Si j'ai défini struct_b
sur non nul, comment puis-je modifier mon exemple pour que lors de l'analyse d'une chaîne JSON qui ne contient pas de champ struct_b
, le second struct_b
设置为非 nil,如何更改我的示例,以便在解析其中不包含 struct_b
字段的 JSON 字符串时,第二个 json.Unmarshal
将显式将 StructB
设置为 nil ?
你不能。 json.Unmarshal
不会修改输入 JSON 中未表示的结构字段。要么使用空结构开始,要么在调用 Unmarshal
sera Définir explicitement StructB
sur nil ?
Unmarshal
s'ils ne sont pas dans l'entrée JSON. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!