Problema con estructura JSON
Buenas
Tengo un problema al intentar realizar un json de un clase que he creado para el recurso FHIR Appointment, el problema lo tengo al nivel del actor, si miro la documentación de FHiR puedo acceder al siguiente ejemplo, para simplificar el entendimiento solo voy a poner en el json y en las clases los elementos que hago referencia.
"participant": [ { "actor": { "reference": "Practitioner/example", }, }, { "actor": { "reference": "Location/1", }, } ] Los dos Actor estan en un mismo corchete
- Para esta estructura he creado las siguientes clases:
{ .....
Property participant As list Of Test.FHIR.Components.participant;
- participant es una lista con la siguiente propiedad
{ Property actor As list Of Test.FHIR.Components.actor;
- actor es otra lista con la siguiente propiedad reference como string
{ Property reference As %String;
- Cuando realizo la transformación a JSON
Set tsc = ##class(%ZEN.proxyObject).%New()
Set tProxy = ##class(Test.FHIR.Resources.Appointment).%New()
Set tSC = tProxy.participant.Insert(##class(Test.FHIR.Components.participant).%New())
Set tSC = tProxy.participant.GetAt(1).actor.Insert(##class(Test.FHIR.Components.actor).%New())
Set tProxy.participant.GetAt(1).actor.GetAt(1).reference = "Patient/12345"
//Caso 1
Set tSC = tProxy.participant.GetAt(1).actor.Insert(##class(Test.FHIR.Components.actor).%New())
Set tProxy.participant.GetAt(1).actor.GetAt(2).reference = "Practitioner/145"
Aqui vemos como se pinta en json
{ ....
"participant":[ {
"actor":[ {
"reference":"Patient\/12345" },
{ "reference":"Practitioner\/145" }
]
}] } Un unico corchete pero solo un actor
//Caso 2
Set tSC = tProxy.participant.Insert(##class(Test.FHIR.Components.participant).%New())
Set tSC = tProxy.participant.GetAt(2).actor.Insert(##class(Test.FHIR.Components.actor).%New())
Set tProxy.participant.GetAt(2).actor.GetAt(1).reference = "Practitioner/145"
{ "participant":
[ { "actor":[
{ "reference":"Patient\/12345" }
] },
{ "actor":[
{ "reference":"Practitioner\/145" }
]
}] } Dos actor pero dos corchetes
Como se observa no consigo replicar la estructura del JSON del ejemplo de FHIR.
Si intento duplicar el actor en
¿Como podria solucionarlo?
Hola Jose,
No sé exactamente con qué versión estás probando pero estás utilizando %ZEN.proxyObject en lugar de las funcionalidades que incorpora IRIS para trabajar con JSON.
Échale un vistazo a Using JSON.
Por ejemplo,
No tengo iris, es Cache for Windows (x86-64) 2018.1.2 (Build 309) Mon Mar 4 2019 15:17:19 EST
Eso lo he intentado de esta manera:
Set tSC = tProxy.participant.GetAt(2).actor.Insert(##class(Test.FHIR.Components.actor).%New())
Por lo que tengo entendido lo que me pones es solo valido para IRIS.
Saludos
Hola de nuevo José,
En la versión 2018 tienes algunas de esas funcionalidades disponible, mira la documentación aquí: https://cedocs.intersystems.com/latest/csp/docbook/Doc.View.cls?KEY=GJSON_preface
Intenta utilizar los %DynamicObjects en lugar de %ZEN.proxyObject.
En todo caso, si sólo puedes usar %ZEN.proxyObject y encuentras un problema, siempre puedes abrir un caso de soporte WRC para que investigarlo en detalle.
Buenas Alberto,
La documentación la habia leido y no me soluciono el problema. No se como implementarlo en mi codigo. Para mi el problema no es en la transformación de json si no pq una clase no permite dos propiedades iguales(actor). Yo en el tProxy cargo valores, pero la estructura del tProxy es la que define como sera el json, no puedo meter en una clase dos atributos iguales y tengo el problema.
Hola de nuevo,
No entiendo muy bien cuál es el objetivo de lo que estás intentando hacer.
¿Estás intentando construir un objeto participant con dos actors para después obtener su representación JSON y poder enviarlo a algún sitio?
En la versión 2018, puedes construir la jerarquía de objetos que necesites y después transformarla tú mismo a un
%DynamicObject
con la estructura que quieras utilizando. Mira Creating and Modifying Dynamic Entities.En IRIS / Health Connect además tendrías la posibilidad de
%JSON.Adaptor
que es mucho más cómodo.¿Has recibido esa cadena JSON y estás intentando pasearla a un objeto?
Puedes convertir la cadena JSON a un
%DynamicObject
y acceder a todos las propiedades (e.g. arrays, objetos, etc.) en forma de objetos para poder trabajar con ellos como prefieras. Mira Converting Dynamic Entities to and from JSONDe todas formas, si no estás familiarizado con estas clases o incluso necesitas que algún especialista se conecte contigo y te echemos una mano no dudes por favor en abrir un caso de soporte WRC para que te podamos ayudar con más detalle.
Buenas Alberto
Lo que estoy intentando es lo que indicas al principio:
¿Estás intentando construir un objeto participant con dos actors para después obtener su representación JSON y poder enviarlo a algún sitio?
Tratare el asunto a traves del soporte de WRC como me indicas.
Muchas gracias
Nuestras redes sociales
Recursos InterSystems
Iniciar sesión o registrarse
Inicie sesión o cree una nueva cuenta para continuar
Iniciar sesión o registrarse
Inicie sesión o cree una nueva cuenta para continuar
Iniciar sesión o registrarse
Inicie sesión o cree una nueva cuenta para continuar