Converti Go Struct in JSON

  1. Converti Go Struct in JSON
  2. Converti strutture annidate in JSON in Go
  3. Rientro in Struct alla conversione JSON in Go

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

Articolo correlato - Go Struct

  • Stampa variabili Struct nella console in Go