Published on InterSystems Developer Community (https://community.intersystems.com)

Inicio > Problema con estructura JSON

Pregunta
Jose Giraldo · 23 sep, 2020

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:

Class Test.FHIR.Resources.Appointment Extends (Ens.Response, Ens.Request, Ens.Util.MessageBodyMethods)
{ .....

Property participant As list Of Test.FHIR.Components.participant;

  • participant es una lista con la siguiente propiedad

Class Test.FHIR.Components.participant Extends (Ens.Response, Ens.Util.MessageBodyMethods)

{ Property actor As list Of Test.FHIR.Components.actor;

  • actor es otra lista con la siguiente propiedad reference como string

Class Test.FHIR.Components.actor Extends (Ens.Response, Ens.Util.MessageBodyMethods)
{ Property reference As %String;

  • Cuando realizo la transformación a JSON

#Dim tProxy As Test.FHIR.Resources.Appointment;
 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  Test.FHIR.Components.participant me da el siguiente error, como es logico

Element name conflict [80670005] : Property actor

¿Como podria solucionarlo?

#Caché

URL de fuente:https://es.community.intersystems.com/post/problema-con-estructura-json