Saltar al contenido
Serialización

Serialización

La biblioteca gofhir/models serializa recursos FHIR a JSON y XML. Cada struct de recurso generado implementa las interfaces estándar de marshaling de Go, y la biblioteca también proporciona funciones personalizadas para los requisitos de serialización específicos de FHIR.

Medido sobre los corpus oficiales de ejemplos, los 3653 ejemplos XML publicados sobreviven un round-trip, igual que el 99,9 % de los 8758 en JSON. Consulta XML Marshaling para ver qué mide y qué no mide esa cifra de XML.

Descripción General de la Serialización

Los recursos FHIR pueden intercambiarse en dos formatos de transmisión: JSON y XML. La biblioteca gofhir/models soporta ambos, con especial atención a los requisitos de la especificación FHIR para cada formato.

Serialización JSON

Todos los structs de recursos implementan json.Marshaler y json.Unmarshaler del paquete estándar encoding/json de Go. Esto significa que puedes usar json.Marshal() y json.Unmarshal() directamente con cualquier tipo de recurso.

import (
    "encoding/json"
    "github.com/gofhir/models/r4/v2"
)

patient := &r4.Patient{
    Id:           ptrTo("123"),
}
data, err := json.Marshal(patient)

Además, la biblioteca proporciona las funciones r4.Marshal() y r4.MarshalIndent() que resuelven un problema específico del codificador JSON estándar de Go: el escape de entidades HTML. Estas funciones personalizadas preservan el contenido HTML en los campos narrativos de FHIR exactamente como lo requiere la especificación FHIR.

Serialización XML

La serialización XML se maneja a través de funciones auxiliares dedicadas en el módulo xml_helpers.go: MarshalResourceXML(), MarshalResourceXMLIndent() y UnmarshalResourceXML(). El manejo de namespaces, la convención FHIR de codificar primitivos como atributos <name value="..."/> y la narrativa XHTML funcionan. Consulta XML Marshaling.

Deserialización Polimórfica

Al trabajar con datos FHIR sin procesar donde el tipo de recurso no se conoce en tiempo de compilación, la biblioteca proporciona un registro de recursos con funciones como UnmarshalResource(), GetResourceType() y NewResource() que permiten el despacho dinámico al struct de Go correcto basándose en el campo resourceType.

Temas

Comparación Rápida

MétodoSeguro para HTMLIndentadoCaso de Uso
json.Marshal()NoNoSalida JSON general sin contenido HTML
json.MarshalIndent()NoSíSalida de depuración/visualización sin contenido HTML
r4.Marshal()SíNoSalida JSON FHIR de producción
r4.MarshalIndent()SíSíSalida JSON FHIR legible por humanos
r4.MarshalResourceXML()N/ANoSalida XML FHIR compacta
r4.MarshalResourceXMLIndent()N/ASíSalida XML FHIR legible por humanos
Para sistemas en producción que intercambian recursos FHIR, usa r4.Marshal() en lugar de json.Marshal() para asegurar que el contenido XHTML narrativo se preserve correctamente. Consulta la página de Marshal Personalizado para más detalles.
Última actualización