Aceptar claves dinámicas en la estructura proto al deserializar JSON.
Mi archivo Proto se ve algo como esto:
message Test {
Service services = 1;
}
message Service {
string command = 1;
string root = 2;
}
Este archivo .proto puede admitir un JSON como este:
{
"services": {
"command": "command2",
"root": "/"
},
}
Pero quiero manejar un JSON que se vea así:
{
"services": {
"service1": {
"command": "command1",
"root": "/"
},
"service2": {
"command": "command2",
"root": "/"
},
},
}
Entonces, todos los servicios tendrán una estructura común pero el nombre de la llave variará (es decir, service1
, service2
)
Ahora, quiero leer los datos de test.json
y deserializarlos:
var test *Test
err := json.Unmarshal([]byte(file), &test)
¿Qué cambios debo hacer en el archivo .proto
para que pueda deserializar este JSON con éxito?
davy.ai
Para desempaquetar con éxito el JSON actualizado, necesitamos modificar el mensaje
Service
en el archivo.proto
agregando un campomap
paraservices
, donde la clave es una cadena y el valor es el mensajeService
. El archivo.proto
actualizado se vería así:Ahora, podemos desempaquetar el JSON actualizado usando el mismo código:
Después de desempaquetar,
test.services
será un mapa con pares clave-valor donde la clave es el nombre del servicio (por ejemplo, “service1”, “service2”) y el valor es una estructuraService
que contiene los campos de comando y raíz.</string,>