Artículo
· 20 oct, 2025 Lectura de 4 min

Ampliar la capacidad de ObjectScript para procesar YAML

El lenguaje ObjectScript cuenta con un soporte increíble para JSON gracias a clases como %DynamicObject y %JSON.Adaptor. Este soporte se debe a la enorme popularidad del formato JSON, que sustituyó el dominio previo de XML. JSON trajo consigo una representación de datos menos verbosa y una mayor legibilidad para las personas que necesitaban interpretar su contenido. Para reducir aún más la verbosidad y aumentar la legibilidad, se creó el formato YAML.

El formato YAML, muy fácil de leer, se convirtió rápidamente en el más popular para representar configuraciones y parametrizaciones, gracias a su legibilidad y mínima verbosidad. Mientras que XML rara vez se utiliza para parametrización y configuración, con YAML el JSON está quedando gradualmente limitado a ser un formato de intercambio de datos, más que uno para configuraciones, parametrizaciones y representaciones de metadatos. Ahora, todo esto se hace con YAML. Por lo tanto, el lenguaje principal de las tecnologías de InterSystems necesita un soporte amplio para el procesamiento de YAML, al mismo nivel que el que ya tiene para JSON y XML. Por esta razón, he publicado un nuevo paquete para convertir ObjectScript en un potente procesador de YAML. El nombre del paquete es yaml-adaptor.

Empecemos instalando el paquete.

1. Si usáis IPM, abrid el Terminal de IRIS y ejecutad:

USER>zpm “install yaml-adaptor”

2. Si usáis Docker, clonad o actualizad el repositorio yaml-adaptor en cualquier directorio local:

$ git clone https://github.com/yurimarx/yaml-adaptor.git

3. Abrid el terminal en este directorio y ejecutad:

$ docker-compose build

4. Ejecutad el contenedor IRIS con vuestro proyecto:

$ docker-compose up -d

¿Por qué usar este paquete?

Con este paquete podréis interoperar fácilmente, leer, escribir y transformar YAML en DynamicObjects, JSON y XML de forma bidireccional. Este paquete os permite leer y generar datos, configuraciones y parametrizaciones en los formatos más populares del mercado de manera dinámica, con poco código, alto rendimiento y en tiempo real.

¡El paquete en acción!

Es muy sencillo usar este paquete. Las funciones son:

  1. Convertir de una cadena YAML a una cadena JSON
ClassMethod TestYamlToJson() As %Status
{
    Set sc = $$$OK
    set yamlContent = ""_$CHAR(10)_
        "user:"_$CHAR(10)_
        "    name: 'Jane Doe'"_$CHAR(10)_
        "    age: 30"_$CHAR(10)_
        "    roles:"_$CHAR(10)_
        "    - 'admin'"_$CHAR(10)_
        "    - 'editor'"_$CHAR(10)_
        "database:"_$CHAR(10)_
        "    host: 'localhost'"_$CHAR(10)_
        "    port: 5432"_$CHAR(10)_
        ""
    Do ##class(dc.yamladapter.YamlUtil).yamlToJson(yamlContent, .jsonContent)
    Set jsonObj = {}.%FromJSON(jsonContent)
    Write jsonObj.%ToJSON()

    Return sc
}

2. Generar un archivo YAML a partir de un archivo JSON

ClassMethod TestYamlFileToJsonFile() As %Status
{

    Set sc = $$$OK
    Set yamlFile = "/tmp/samples/sample.yaml"
    Set jsonFile = "/tmp/samples/sample_result.json"
    Write ##class(dc.yamladapter.YamlUtil).yamlFileToJsonFile(yamlFile,jsonFile)
    

    Return sc
}

3. Convertir de una cadena JSON a una cadena YAML

ClassMethod TestJsonToYaml() As %Status
{
    Set sc = $$$OK
    set jsonContent = "{""user"":{""name"":""Jane Doe"",""age"":30,""roles"":[""admin"",""editor""]},""database"":{""host"":""localhost"",""port"":5432}}"
    Do ##class(dc.yamladapter.YamlUtil).jsonToYaml(jsonContent, .yamlContent)
    Write yamlContent

    Return sc
}

4. Generar un archivo JSON a partir de un archivo YAML

ClassMethod TestJsonFileToYamlFile() As %Status
{

    Set sc = $$$OK
    Set jsonFile = "/tmp/samples/sample.json"
    Set yamlFile = "/tmp/samples/sample_result.yaml"
    Write ##class(dc.yamladapter.YamlUtil).jsonFileToYamlFile(jsonFile, yamlFile)
    

    Return sc
}

5. Cargar un objeto dinámico desde una cadena YAML o archivos YAML

ClassMethod TestYamlFileToDynamicObject() As %Status
{
    Set sc = $$$OK
    Set yamlFile = "/tmp/samples/sample.yaml"
    Set dynamicYaml = ##class(YamlAdaptor).CreateFromFile(yamlFile)

    Write "Title: "_dynamicYaml.title, !
    Write "Version: "_dynamicYaml.version, !

    Return sc
}

Generar YAML a partir de objetos dinámicos

ClassMethod TestDynamicObjectToYaml() As %Status
{
    Set sc = $$$OK
    Set dynaObj = {}
    Set dynaObj.project = "Project A"
    Set dynaObj.version = "1.0"
    Set yamlContent = ##class(YamlAdaptor).CreateYamlFromDynamicObject(dynaObj)

    Write yamlContent

    Return sc
}

Generar un archivo XML a partir de un archivo YAML

ClassMethod TestXmlFileToYamlFile() As %Status
{

    Set sc = $$$OK
    Set xmlFile = "/tmp/samples/sample.xml"
    Set yamlFile = "/tmp/samples/sample_xml_result.yaml"
    Write ##class(dc.yamladapter.YamlUtil).xmlFileToYamlFile(xmlFile, yamlFile)
    

    Return sc
}

Generar un archivo YAML a partir de un archivo XML

ClassMethod TestYamlFileToXmlFile() As %Status
{

    Set sc = $$$OK
    Set yamlFile = "/tmp/samples/sample.yaml"
    Set xmlFile = "/tmp/samples/sample_result.xml"
    Write ##class(dc.yamladapter.YamlUtil).yamlFileToXmlFile(yamlFile, "sample", xmlFile)
    

    Return sc
}
Comentarios (0)0
Inicie sesión o regístrese para continuar