Hay unas pocas preguntas sobre el tema , pero ninguno de ellos parecen cubrir mi caso, por lo tanto estoy creando una nueva.
Tengo JSON como el siguiente:
{"foo":{ "bar": "1", "baz": "2" }, "more": "text"}
¿Hay alguna forma de desarmar la propiedad de la barra anidada y asignarla directamente a una propiedad de estructura sin crear una estructura anidada?
La solución que estoy adoptando ahora mismo es la siguiente:
type Foo struct {
More String `json:"more"`
Foo struct {
Bar string `json:"bar"`
Baz string `json:"baz"`
} `json:"foo"`
// FooBar string `json:"foo.bar"`
}
Esta es una versión simplificada, ignore la verbosidad. Como puede ver, me gustaría poder analizar y asignar el valor a
// FooBar string `json:"foo.bar"`
He visto gente usando un mapa, pero ese no es mi caso. Básicamente, no me importa el contenido de foo
(que es un objeto grande), excepto por algunos elementos específicos.
¿Cuál es el enfoque correcto en este caso? No estoy buscando trucos extraños, así que si este es el camino a seguir, estoy de acuerdo con eso.
Como mencionó Volker, las estructuras anidadas son el camino a seguir. Pero si realmente no desea estructuras anidadas, puede anular la función UnmarshalJSON.
https://play.golang.org/p/dqn5UdqFfJt
Por favor ignore el hecho de que no estoy devolviendo un error adecuado. Dejé eso por simplicidad.
ACTUALIZACIÓN: Recuperando correctamente el valor "más".
fuente
Este es un ejemplo de cómo deshacer las respuestas JSON del servidor proxy Safebrowsing v4 API sbserver: https://play.golang.org/p/4rGB5da0Lt
fuente
Si. Con gjson, todo lo que tienes que hacer ahora es:
bar := gjson.Get(json, "foo.bar")
bar
podría ser una propiedad de estructura si lo desea. Además, no hay mapas.fuente
fastjson.GetString(json, "foo", "bar")
¿Qué pasa con los campos anónimos? No estoy seguro de si eso constituirá una "estructura anidada", pero es más limpio que tener una declaración de estructura anidada. ¿Qué sucede si desea reutilizar el elemento anidado en otro lugar?
fuente
Asigne los valores de anidado
json
a estructura hasta que sepa el tipo subyacente de claves json: -fuente
Estaba trabajando en algo como esto. Pero está trabajando solo con estructuras generadas a partir de proto. https://github.com/flowup-labs/grpc-utils
en tu proto
Entonces tu salida será
fuente
La combinación de mapa y estructura permite desagrupar objetos JSON anidados donde la clave es dinámica. => mapa [cadena]
Por ejemplo: stock.json
Ir aplicación
La clave dinámica en el hash es manejar una cadena y el objeto anidado está representado por una estructura.
fuente