Comment convertir Go struct en JSON

  1. Convertir la structure de Go en JSON
  2. Conversion des structures imbriquées en JSON dans Go
  3. Indentation dans la structure en JSON Conversion en Go

JSON est un format léger indépendant du langage pour le stockage et le transport des données. Dans Go, nous avons le paquet encoding/json, qui contient de nombreuses méthodes intégrées pour les opérations liées à JSON. Nous pouvons convertir des données structurées en JSON en utilisant la conversion (marshaling).

Convertir la structure de Go en JSON

La méthode marshal reçoit l’objet struct et retourne une tranche d’octets des données codées, que nous pouvons changer en JSON dans Go.

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Name   string `json:"empname"`
    Number int    `json:"empid"`
}

func main() {
    employee_1 := &Employee{Name: "Dixya Lhyaho", Number: 10}
    e, err := json.Marshal(employee_1)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(e))
}

Production:

{"empname":"Dixya Lhyaho","empid":10}

Si nous changeons la propriété Number en number, number est maintenant ignoré dans le processus de rassemblement car le paquet json/encoding ne peut pas le voir.

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Name   string `json:"empname"`
    number int    `json:"empid"`
}

func main() {
    employee_1 := &Employee{Name: "Dixya Lhyaho", number: 10}
    e, err := json.Marshal(employee_1)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(e))
}

Production:

{"empname":"Dixya Lhyaho"}

Conversion des structures imbriquées en JSON dans Go

Définissons une structure plus complexe avec des structures imbriquées. Dans la définition de la structure, nous définissons les balises JSON qui mettent en correspondance les champs de nos structures directement avec les champs de notre JSON rassemblé.

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Position string `json:"position"`
    Name     Name   `json:"name"`
}

type Name struct {
    FirstName string `json:"firstname"`
    Surname   string `json:"surname"`
}

func main() {
    name := Name{FirstName: "Dikxya", Surname: "Lhyaho"}
    employee := Employee{Position: "Senior Developer", Name: name}

    byteArray, err := json.Marshal(employee)
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(byteArray))
}

Production:

{"position":"Senior Developer","name":{"firstname":"Dikxya","surname":"Lhyaho"}}

Indentation dans la structure en JSON Conversion en Go

Nous pouvons utiliser la fonction json.MarshalIndent() au lieu de la fonction json.Marshal() pour imprimer JSON dans un format plus lisible. Nous passons deux arguments supplémentaires, chaîne de préfixe et la chaîne d'indentation à MarshalIndent.

package main

import (
    "encoding/json"
    "fmt"
)

type Employee struct {
    Position string `json:"position"`
    Name     Name   `json:"name"`
}

type Name struct {
    FirstName string `json:"firstname"`
    Surname   string `json:"surname"`
}

func main() {
    name := Name{FirstName: "Dikxya", Surname: "Lhyaho"}
    employee := Employee{Position: "Senior Developer", Name: name}

    byteArray, err := json.MarshalIndent(employee, "", "  ")
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(byteArray))
}

Production:

{
  "position": "Senior Developer",
  "name": {
    "firstname": "Dikxya",
    "surname": "Lhyaho"
  }
}