Pregunta
Marta Ventura-Costa · Ago 4, 2021

Como quitar de un JSON una lista vacia?

Tengo esta clase definida:

Class Services.IS.Data.Pe Extends (%RegisteredObject, %JSON.Adaptor)
{

Property codigo As %String;

Property descripcion As %String;

Property ListaP As list Of P;

ClassMethod LoadPeCap(Param1 As %String, Param2 As %String) As %JSON.Adaptor
{
    
      Set rs = ##class(%SQL.Statement).%ExecDirect(,"SELECT PRF_c as PRF_c,PRF_des as PRF_des  FROM Esquema.tabla where PRF_c ="_Param1_" or PRF_c="_Param2)
      Set pts ={"pts":[]}
      While rs.%Next() {
        Set pec ={
           "PRF_c":              (rs.%Get("PRF_c")),
         "PRF_des":        (rs.%Get("PRF_des"))
            
        } 

     set pec.codigo = rs.Get("PRF_c")
     set pec.descripcion = rs.%Get("PRF_des")*/
     Do pts.pts.%Push(pec)

     }

     Quit pts
}

Y en el JSON me aparece esto:

{
    "pts": [
        "{\"codigo\":\"1\",\"descripcion\":\"Publicada\",\"ListaP\":[]}"
    ]
}

Hay alguna manera de que la Property creada como List no aparezca si no tiene datos??

Gracias

 

Product version: IRIS 2020.1
$ZV: 2020.1.1.408.0
00
2 0 1 47
Inicie sesión o regístrese para continuar

Hola Marta,

No consigo entender exactamente lo que intentas probar.

Parece que tu clase es un %JSON.Adaptor pero luego en tu código parece que estás intentando generar un %DynamicObject sobre la marcha. No sé en qué caso encuentras el problema.

Te paso un ejemplo parecido al de tu clase y un método para probar:

Class Services.IS.Data.Pe Extends (%RegisteredObject, %JSON.Adaptor)
{

Property codigo As %String;

Property descripcion As %String;

Property ListaP As list Of %String;

ClassMethod Test()
{
    // Ejemplo. %JSONExport()
    set obj = ##class(Services.IS.Data.Pe).%New()
    set obj.codigo = "123"
    set obj.descripcion = "desc"
    write !,"obj.%JSONExport(): "
    do obj.%JSONExportToString(.output)
    write !,output

    // Ejemplo. %DynamicObject
    set pts = { "pts":[] }
    for i=1:1:3 {
        set pec = { } 
        set pec.codigo = "cod"_i
        set pec.descripcion = "des"_i
        do pts.pts.%Push(pec)
    }

    write !!,"%Dynamic Object"
    write !,pts.%ToJSON()
}

}

Si lo pruebas, verás que en ningún caso (ni con %JSON.Adaptor ni con %DynamicObject) se genera la lista vacía que indicas:

USER>do ##class(Services.IS.Data.Pe).Test()

obj.%JSONExport(): 
{"codigo":"123","descripcion":"desc"}

%Dynamic Object
{"pts":[{"codigo":"cod1","descripcion":"des1"},{"codigo":"cod2","descripcion":"des2"},{"codigo":"cod3","descripcion":"des3"}]}

Aquí puedes encontrar más información sobre JSON y cómo trabajar tanto con %JSON.Adaptor como con %DynamicObject:
https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls...