"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como desempacotar matrizes JSON com tipos de dados mistos no Go?

Como desempacotar matrizes JSON com tipos de dados mistos no Go?

Publicado em 2024-12-22
Navegar:312

How to Unmarshal JSON Arrays with Mixed Data Types in Go?

Desempacotando matrizes JSON com tipos de dados mistos

A tarefa de desempacotar matrizes JSON contendo valores de diferentes tipos de dados muitas vezes pode representar um desafio. Por exemplo, considere a seguinte matriz JSON:

{["NewYork",123]}

Problema:

Em primeiro lugar, é crucial observar que o JSON fornecido está sintaticamente incorreto. Objetos JSON exigem chaves para cada valor, portanto, uma representação correta seria {"key":["NewYork",123]} ou simplesmente ["NewYork",123].

Além disso, ao lidar com JSON matrizes compostas por vários tipos de dados, o problema surge quando as matrizes Go precisam de um tipo especificado. Isso pode deixar você se perguntando como lidar com essas situações.

Solução:

A chave para resolver esse problema é empregar a interface de tipo{}. Ele permite lidar com valores de tipos variados sem a necessidade de conversão explícita de tipo. Aqui está um exemplo de código que demonstra como funciona:

import (
    "encoding/json"
    "fmt"
)

const j = `{"NYC": ["NewYork",123]}`

type UntypedJson map[string][]interface{}

func main() {
    ut := UntypedJson{}
    fmt.Println(json.Unmarshal([]byte(j), &ut))
    fmt.Printf("%#v", ut)
}

Neste exemplo, usamos UntypedJson como um tipo personalizado que mapeia strings para fatias da interface{}. Ao utilizar o tipo de interface{}, podemos lidar facilmente com tipos de dados mistos dentro da matriz JSON.

A saída do programa seria:

<nil>
map[string][]interface{}{"NYC": \["NewYork" 123]}

Conclusão:

Aproveitando o tipo de interface{}, essa abordagem permite desempacotar matrizes JSON de maneira eficaz com vários tipos de dados.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3