Convertir JSON a Struct en Go
-
Use el método
Unmarshal
para convertir JSON a Struct en Go - Convierta una matriz de JSON en Struct en Go
- Convierta un JSON anidado en Struct en Go
Este tutorial demuestra cómo convertir JSON en una estructura en GoLang.
Use el método Unmarshal
para convertir JSON a Struct en Go
El paquete encoding/json
de GoLang proporciona una función Unmarshal
, que convierte datos JSON a formato de bytes. Esta función puede analizar los datos JSON estructurados y no estructurados en el formulario []byte
.
Podemos usar esta conversión de bytes para convertir el JSON en una estructura. Probemos un ejemplo para convertir JSON en una estructura usando el método Unmarshal
:
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Name string
ID int
Salary int
Position string
}
func main() {
EmployeeJSON := `{"Name": "Sheeraz", "ID": 10, "Salary": 3000, "Position": "Senior Developer" }`
var employees Employee
json.Unmarshal([]byte(EmployeeJSON), &employees)
fmt.Printf("Name: %s, ID: %d , Salary: %d , Position: %s", employees.Name, employees.ID, employees.Salary, employees.Position)
fmt.Println("\n", employees)
}
El código anterior convierte el JSON dado en una estructura utilizando el método Unmarshal
de la biblioteca estándar JSON de GoLang. Ver la salida:
Name: Sheeraz, ID: 10 , Salary: 3000 , Position: Senior Developer
{Sheeraz 10 3000 Senior Developer}
Program exited.
Convierta una matriz de JSON en Struct en Go
Como podemos ver, el ejemplo anterior convierte un solo JSON en una estructura, pero ¿qué pasa si tenemos una matriz de JSON? Probemos un ejemplo para convertir la matriz de JSON en una estructura:
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Name string
ID int
Salary int
Position string
}
func main() {
EmployeeJSON := `[{"Name": "Sheeraz", "ID": 10, "Salary": 3000, "Position": "Senior Developer" },
{"Name": "Jack", "ID": 20, "Salary": 2000, "Position": "Junior Developer" },
{"Name": "John", "ID": 30, "Salary": 1500, "Position": "Junior Developer" },
{"Name": "Mike", "ID": 40, "Salary": 1000, "Position": "Intern" }
]`
var employees []Employee
json.Unmarshal([]byte(EmployeeJSON), &employees)
fmt.Printf("Employees Structs : %+v", employees)
}
El código anterior convertirá la matriz de JSON en una matriz de estructuras. Ver la salida:
Employees Structs : [
{Name:Sheeraz ID:10 Salary:3000 Position:Senior Developer}
{Name:Jack ID:20 Salary:2000 Position:Junior Developer}
{Name:John ID:30 Salary:1500 Position:Junior Developer}
{Name:Mike ID:40 Salary:1000 Position:Intern}]
Program exited.
Convierta un JSON anidado en Struct en Go
Los JSON también se crean en forma anidada donde un campo en JSON contiene otro campo. Para convertir este tipo de JSONS, tenemos que crear estructuras anidadas.
Veamos un ejemplo:
package main
import (
"encoding/json"
"fmt"
)
type EmployeeType struct {
Gender string
Contract string
}
type Employee struct {
Name string
ID int
Salary int
Position string
EmployeeType EmployeeType
}
func main() {
EmployeeJSON := `{"Name": "Sheeraz", "ID": 10, "Salary": 3000, "Position": "Senior Developer", "EmployeeType": {"Gender": "Male" ,"Contract": "Fulltime"} }`
var employees Employee
json.Unmarshal([]byte(EmployeeJSON), &employees)
fmt.Printf("Name: %s, ID: %d , Salary: %d , Position: %s, Gender: %s, Contract: %s",
employees.Name, employees.ID, employees.Salary, employees.Position, employees.EmployeeType.Gender, employees.EmployeeType.Contract)
fmt.Println("\n", employees)
}
El código anterior convertirá un objeto JSON anidado en una estructura anidada. Ver la salida:
Name: Sheeraz, ID: 10 , Salary: 3000 , Position: Senior Developer, Gender: Male, Contract: Fulltime
{Sheeraz 10 3000 Senior Developer {Male Fulltime}}
Program exited.
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook