"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo analizar JSON con pares clave/valor conocidos y desconocidos en una estructura Go?

¿Cómo analizar JSON con pares clave/valor conocidos y desconocidos en una estructura Go?

Publicado el 2024-11-07
Navegar:326

How to Parse JSON with Known and Unknown Key/Value Pairs into a Go Struct?

Desclasificar JSON con pares de clave/valor arbitrarios para estructurar

Problema

¿Cómo puedo analizar una cadena JSON con pares de clave/valor conocidos y desconocidos? en una estructura Go? Los campos desconocidos pueden tener cualquier nombre y tipo de valor (cadena, bool, float64 o int).

Solución

Cree una estructura con los campos conocidos y una porción de mapas para los campos desconocidos. :

type Message struct {
    Known1   string `json:"known1"`
    Known2   string `json:"known2"`
    Unknowns []map[string]interface{}
}

Descomponga la cadena JSON en esta estructura:

json.Unmarshal([]byte(jsonMsg), &msg)

El campo Desconocidos contendrá una lista de mapas que representan los pares clave/valor desconocidos.

Alternativas

  1. Doble Unmarshal:

    • Primero, desmarshal en una estructura temporal que contiene solo los campos conocidos.
    • Luego, descomponga nuevamente en una interfaz de mapa[string]{} y extraiga los valores desconocidos manualmente.
  2. Desclasificación y conversión de tipos:

    • Desclasificación en una interfaz de mapa[string]{}.
    • Itere sobre el mapa y escriba afirmar los valores en los tipos apropiados .

Consideraciones

Las tres soluciones son válidas, pero la más simple y elegante es el enfoque inicial basado en estructuras. Evita la necesidad de desclasificaciones adicionales o conversiones de tipos manuales.

Último tutorial Más>

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