Converti Go Struct in JSON

Suraj Joshi 10 agosto 2021
  1. Converti Go Struct in JSON
  2. Converti strutture annidate in JSON in Go
  3. Rientro in Struct alla conversione JSON in Go
Converti Go Struct in JSON

JSON è un formato leggero e indipendente dalla lingua per l’archiviazione e il trasporto dei dati. In Go, abbiamo il pacchetto encoding/json, che contiene molti metodi incorporati per le operazioni relative a JSON. Possiamo convertire i dati della struttura in JSON usando il marshalling.

Converti Go Struct in JSON

Il metodo marshal riceve l’oggetto struct e restituisce una fetta di byte dei dati codificati, che possiamo cambiare in JSON in 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))
}

Produzione:

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

Se cambiamo la proprietà Number in number, number viene ora ignorato nel processo di marshaling poiché il pacchetto json/encoding non può vederlo.

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))
}

Produzione:

{"empname":"Dixya Lhyaho"}

Converti strutture annidate in JSON in Go

Definiamo una struttura più complessa con una struttura annidata. All’interno della definizione della struttura, definiamo i tag JSON che mappano i campi delle nostre strutture direttamente ai campi nel nostro JSON sottoposto a marshalling.

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))
}

Produzione:

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

Rientro in Struct alla conversione JSON in Go

Possiamo usare la funzione json.MarshalIndent() invece della funzione json.Marshal() per stampare JSON in un formato più leggibile. Passiamo due argomenti aggiuntivi, prefix string e indent string a 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))
}

Produzione:

{
  "position": "Senior Developer",
  "name": {
    "firstname": "Dikxya",
    "surname": "Lhyaho"
  }
}
Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Articolo correlato - Go Struct