Maison > Article > développement back-end > Utiliser struct pour analyser le json imbriqué dans le langage go
Impossible d'utiliser go lang pour analyser le json imbriqué dans un objet de structure
J'ai une chaîne json imbriquée et je souhaite l'analyser à l'aide de structures en langage go. json ressemble à ça
{"action":"add","business":{"listid":123,"objecttags":[{"tagcode":"csharp","tagname":"codename","tagvalue":["2"],"tagtype":3},{"tagcode":"golang","tagname":"coding","tagvalue":["3"],"tagtype":3}]}}
Je souhaite analyser JSON en utilisant le langage Go. json a une structure imbriquée, j'ai donc créé la structure mentionnée dans le code suivant
package main import ( "encoding/json" "fmt" ) type objecttagslist struct { tagcode string tagname string tagvalue []string } type model struct { action string `json:"action"` business struct { listid int64 `json:"listid"` objecttags []objecttagslist `json:"objecttags"` } `json:"business"` } func main() { json := `{"action":"add","business":{"listid":123,"objecttags":[{"tagcode":"csharp","tagname":"codename","tagvalue":["2"],"tagtype":3},{"tagcode":"golang","tagname":"coding","tagvalue":["3"],"tagtype":3}]}}` var model model json.unmarshal([]byte(json), &model) fmt.println(model.action) // this prints correctly as "add" fmt.println(model.business.listid) // this prints correctly as "123" fmt.println(model.business.objecttags) // this does not print the objecttags. rather this prints the objecttags as "[{ []} { []}]" }
Je n'arrive pas à obtenir la valeur du json imbriqué interne dans la structure.
J'ai également essayé de déballer à nouveau la structure interne
var object []objecttagslist //this gives error as cannot convert model.business.objecttags (variable of type []objecttagslist) to type []byte json.unmarshal([]byte(model.business.objecttags), &object)
//Erreur, model.business.objecttags (variable de type []objecttagslist) ne peut pas être converti en type []byte
fmt.println(object)
Cela me donne une erreur Impossible de convertir model.business.objecttags (variable de type []objecttagslist) en type []byte.
Comment mapper ce json dans une structure ? Je veux le cartographier de manière à pouvoir utiliser des objets comme
model.Business.ObjectTags[0].tagCode //--> Should print/store "csharp" model.Business.ObjectTags[0].tagValue[0] //--> Should print/store "2"
Veuillez aider
Vous ne pouvez rassembler/désorganiser que les champs "exportés" - c'est-à-dire les champs accessibles en dehors du package actuel, ce qui signifie "champs commençant par une lettre majuscule". Donc si vous deviez modifier votre code pour ressembler à ceci :
package main import ( "encoding/json" "fmt" ) type objecttagslist struct { tagcode string tagname string tagvalue []string } type model struct { action string `json:"action"` business struct { listid int64 `json:"listid"` objecttags []objecttagslist `json:"objecttags"` } `json:"business"` } func main() { json := ` { "action": "add", "business": { "listid": 123, "objecttags": [ { "tagcode": "csharp", "tagname": "codename", "tagvalue": [ "2" ], "tagtype": 3 }, { "tagcode": "golang", "tagname": "coding", "tagvalue": [ "3" ], "tagtype": 3 } ] } } ` var model model json.unmarshal([]byte(json), &model) fmt.println(model.action) fmt.println(model.business.listid) fmt.println(model.business.objecttags) }
Vous obtiendrez le résultat :
add 123 [{csharp codename [2]} {golang coding [3]}]
Ici, nous profitons du fait que json
模块会自动将名为 tagcode
的键映射到名为 tagcode
est un champ de structure, mais en réalité, nous devons être clairs :
type ObjectTagsList struct { TagCode string `json:"tagCode"` TagName string `json:"tagName"` TagValue []string `json:"tagValue"` }
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!