Dave Cheney, un experto de renombre en GO, enfatiza el requisito de seguir las comas en las declaraciones literales compuestas. Sin embargo, esta regla parece entrar en conflicto con el análisis JSON.
Considere el siguiente código:
// 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
}
Eliminar la coma de final resuelve el error de tiempo de ejecución. GO admite una solución para esta inconsistencia?
Desafortunadamente, no hay solución. La especificación JSON no permite las comas finales. Mientras que la sintaxis GO exige comas en los literales compuestos, este requisito no se aplica al análisis de JSON.
En otras palabras, el siguiente JSON no es válido:
{ "objects":
[
{"name": "foo"},
]}
a pesar del potencial de un analizador JSON específico para ignorar la coma final, esta práctica debe evitarse, ya que puede causar errores al usar otros analizadores JSON válidos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3