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.
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