Converti Go Struct in JSON
- Converti Go Struct in JSON
- Converti strutture annidate in JSON in Go
- 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"
}
}
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn