How to convert two separate field values of a JSON into a Go map?

Asked

Viewed 42 times

-1

I have a JSON that looks like this:

{
    "estados":[
        {
            "sigla": "SP",
            "nome": "São Paulo"
        },
        {
            "sigla": "RJ",
            "nome": "Rio de Janeiro"
        }
    ]
}

How can I turn this JSON in a map in Go, where the keys to the map would be the field values sigla and the values would be the field values nome

In Go:

fmt.Println(estados["SP"]) // imprime São Paulo

1 answer

0

Simply decode and iterate to create the map.

func newEstadosMap() (estados map[string]string) {
    raw := []byte(`{"estados":[{"sigla":"SP","nome":"São Paulo"},{"sigla":"RJ","nome":"Rio de Janeiro"}]}`)
    dec := struct {
        Estados []struct {
            Sigla string `json:"sigla"`
            Nome  string `json:"nome"`
        } `json:"estados"`
    }{}

    if err := json.Unmarshal(raw, &dec); err != nil {
        return
    }

    estados = make(map[string]string)
    for _, estado := range dec.Estados {
        estados[estado.Sigla] = estado.Nome
    }

    return estados
}

First, we decode the json, for the struct dec. So we iterated on it, from dec.Estados to create the estados. I’ve put it all together into one function just to make it simpler, but you can break it into several functions...


Then you could do:

package main

import (
    "encoding/json"
    "fmt"
)

var Estados = newEstadosMap() // Invoca o código acima, criado o Estados assim que inicializar.

func main() {
    fmt.Println(Estados["RJ"])
}

Upshot:

Rio de Janeiro

Browser other questions tagged

You are not signed in. Login or sign up in order to post.