Dave Cheney, um especialista de renome em Go, enfatiza o requisito para a direita de vírgulas em declarações literais compostas. No entanto, essa regra parece conflitar com o JSON Parsing. Tipo jsonObject struct { Objetos [] ObjectType `JSON:" Objects "` } TIPO ObjectType struct { Nome String `JSON:" Name "` } func main () { bytes: = [] byte (`{" objetos ": [[ {"Nome": "Foo"}, // Remova a vírgula para fazer o código funcionar! ]} `) jsonType: = & jsonObject {} JSON.UNMARSHAL (BYTES, & JSONTYPE) fmt.printf ("Resultados: %v \ n", jsonype.objects [0] .name) // pânico: erro de tempo de execução: indexado fora do intervalo }
removendo a vírgula à direita resolve o erro de tempo de execução. GO suporta uma correção para essa inconsistência?
// package, imports omitted for brevity
type jsonobject struct {
Objects []ObjectType `json:"objects"`
}
type ObjectType struct {
Name string `json:"name"`
}
func main() {
bytes := []byte(`{ "objects":
[
{"name": "foo"}, // REMOVE THE COMMA TO MAKE THE CODE WORK!
]}`)
jsontype := &jsonobject{}
json.Unmarshal(bytes, &jsontype)
fmt.Printf("Results: %v\n", jsontype.Objects[0].Name) // panic: runtime error: index out of range
}
Infelizmente, não há solução. A especificação JSON não permite vírgulas à direita. Enquanto a sintaxe vá exige vírgulas à direita em literais compostos, esse requisito não se aplica ao JSON Parsing.
[[
{"Nome": "Foo"},
]]} apesar do potencial de um analisador JSON específico ignorar a vírgula à direita, essa prática deve ser evitada, pois pode causar erros ao usar outros analisadores JSON válidos.
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