Como converter a estrutura de Go para JSON

  1. Converter a estrutura Go para JSON
  2. Converter Estruturas Aninhadas para JSON em Go
  3. Indentação em Estrutura para JSON Conversão em Go

O JSON é um formato leve e independente do idioma para armazenamento e transporte de dados. Em Go, temos o pacote encoding/json, que contém muitos métodos embutidos para operações relacionadas ao JSON. Podemos converter dados estruturais em JSON utilizando o marshaling.

Converter a estrutura Go para JSON

O método marshal recebe objeto estruturante e retorna uma fatia de byte dos dados codificados, que podemos alterar para JSON em 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))
}

Resultado:

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

Se mudarmos a propriedade Number para number, o number é agora ignorado no processo de marshaling, uma vez que o pacote json/encoding não pode vê-lo.

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

Resultado:

{"empname":"Dixya Lhyaho"}

Converter Estruturas Aninhadas para JSON em Go

Vamos definir uma estrutura mais complexa com estrutura aninhada. Dentro da definição da estrutura, definimos as tags JSON que mapeiam os campos de nossas estruturas diretamente para os campos em nosso JSON marshal.

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

Resultado:

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

Indentação em Estrutura para JSON Conversão em Go

Podemos utilizar a função json.MarshalIndent() em vez da função json.Marshal() para imprimir o JSON em um formato mais legível. Passamos dois argumentos adicionais, prefixar string e a função indent string para 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))
}

Resultado:

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

Artigo relacionado - Go Struct

  • Como Imprimir Variáveis de Estruturas em Console do Go