"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 lidar com matrizes aninhadas em Go JSON Unmarshalling?

Como lidar com matrizes aninhadas em Go JSON Unmarshalling?

Publicado em 2024-11-08
Navegar:210

How to Handle Nested Arrays in Go JSON Unmarshalling?

Golang JSON: Manipulação de matrizes aninhadas com desempacotamento

No Go, ao trabalhar com matrizes JSON aninhadas após a desempacotamento, é crucial entender o erro "type interface {} não suporta indexação." Esse erro ocorre quando você tenta acessar um elemento em uma matriz JSON armazenada em uma variável{} de interface.

Para resolver esse problema, você precisará utilizar asserções de tipo para converter a variável{} de interface na variável tipo de matriz subjacente.

Interface{} Representação no módulo JSON

O módulo JSON representa matrizes como fatias de []interface{} e dicionários como mapa[string]interface{ } mapeia ao decodificar em uma variável de interface{}.

Acessando elementos aninhados com asserções de tipo

Sem verificação de erros, você pode navegar na matriz JSON usando asserções de tipo da seguinte maneira :

objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])

No entanto, é importante observar que essas asserções de tipo podem entrar em pânico se os tipos não corresponderem. Para evitar esse problema, você pode usar o formulário de dois retornos e verificar o erro:

objects, ok := result["objects"].([]interface{})
if !ok {
    // Handle error here
}

Decodificação em uma estrutura para acesso aprimorado

Se os dados JSON seguirem um formato consistente, uma solução mais eficiente é decodificá-los em um tipo estruturado. Por exemplo, com base nos dados fornecidos:

type Result struct {
    Query   string `json:"query"`
    Count   int    `json:"count"`
    Objects []struct {
        ItemId      string `json:"ITEM_ID"`
        ProdClassId string `json:"PROD_CLASS_ID"`
        Available   int    `json:"AVAILABLE"`
    } `json:"objects"`
}

Ao decodificar nesta estrutura, você pode acessar diretamente o ID do item usando result.Objects[0].ItemId. Essa abordagem elimina a necessidade de asserções de tipo e fornece um método seguro de tipo para acessar elementos aninhados.

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