A linguagem ObjectScript possui um suporte incrível a JSON por meio de classes como %DynamicObject e %JSON.Adaptor. Esse suporte se deve à imensa popularidade do formato JSON em relação ao domínio anterior do XML. O JSON trouxe menos verbosidade à representação de dados e aumentou a legibilidade para humanos que precisavam interpretar conteúdo JSON. Para reduzir ainda mais a verbosidade e aumentar a legibilidade, o formato YAML foi criado. O formato YAML, muito fácil de ler, rapidamente se tornou o formato mais popular para representar configurações e parametrizações, devido à sua legibilidade e verbosidade mínima. Embora o XML raramente seja usado para parametrização e configuração, com o YAML, o JSON está gradualmente se limitando a ser um formato de troca de dados, em vez de ser usado para configurações, parametrizações e representações de metadados. Agora, tudo isso é feito com YAML. Portanto, a linguagem primária das tecnologias InterSystems precisa de amplo suporte para processamento YAML, no mesmo nível que para JSON e XML. Por esse motivo, lancei um novo pacote para tornar o ObjectScript um poderoso processador YAML. O nome do pacote é yaml-adaptor.
Vamos começar instalando o pacote
1. Se for de IPM, abra o IRIS Terminal e execute:
USER>zpm “install yaml-adaptor”
2. Se for de Docker, Clone/git pull o repositório do yaml-adaptor em uma pasta local:
$ git clone https://github.com/yurimarx/yaml-adaptor.git
3. Abra o terminal na pasta e execute:
$ docker-compose build
4. Execute o IRIS container do projeto:
$ docker-compose up -d
Por que usar o pacote?
Com este pacote, você poderá interoperar, ler, escrever e transformar YAML em DynamicObjects, JSON e XML bidirecionalmente. Este pacote permite ler e gerar dados, configurações e parametrizações nos formatos mais populares do mercado de forma dinâmica, com pouco código, alto desempenho e em tempo real.
O pacote em ação!
É muito simples. As capacidades são:
1. Converter de YAML string para JSON string
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. Gerar arquivo YAML de um arquivo 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. Converter de JSON string para YAML string
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. Gerar arquivo JSON de um arquivo 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. Carregar um objeto dinâmico a partir de YAML string ou arquivos 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
}
6. Gerar YAML 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
}
7. Gerar arquivo XML de arquivo 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
}
8. Gerar arquivo YAML de arquivo 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
}
.png)
ボタンをクリックするだけで始められます👍.png)