Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear estructura en Json (https://www.clubdelphi.com/foros/showthread.php?t=88399)

lbidi 01-06-2015 17:36:06

Crear estructura en Json
 
Estimados foristas.
Tengo el siguiente codigo en XE5, para crear una estructura JSON con un formato especifico.

Código Delphi [-]
var
  MainObject, Obj_Estudios, Obj_Examenes : TJSONObject;
  Array_Estudios , Array_Examenes : TJSONArray;
begin
    try
        MainObject := TJSONObject.Create;
        try

            Array_Estudios := TJSONArray.Create;
            Array_Examenes := TJSONArray.Create;

            Obj_Estudios := TJSONObject.Create;
            Obj_Estudios.AddPair(TJSONPair.Create('Nombre', 'hemograma' ) );
            Obj_Estudios.AddPair(TJSONPair.Create('Fecha', '01/01/15') ) ;
            Array_Estudios.Add(Obj_Estudios);

            Array_Estudios.Add( Array_Examenes ) ; <<-- aca me crea el array vacio, obviamente.

            Obj_Examenes := TJSONObject.Create;
            Obj_Examenes.AddPair(TJSONPair.Create('Nombre', 'hemoglobina' ) );
            Obj_Examenes.AddPair(TJSONPair.Create('Valor', 'negativo') );
            Array_Examenes.Add(Obj_Examenes);

            Obj_Examenes := TJSONObject.Create;
            Obj_Examenes.AddPair(TJSONPair.Create('Nombre', 'hemograma' ) );
            Obj_Examenes.AddPair(TJSONPair.Create('Valor', '1.16') );
            Array_Examenes.Add(Obj_Examenes);

            Array_Estudios.Add(Array_Examenes);

            MainObject.AddPair(TJSONPair.Create('Estudios', Array_Estudios ) ) ;

            Memo1.Text := MainObject.ToString;

        finally
            MainObject.Free;  //free all the child objects.
        end;
    except
        on E: Exception do
            Writeln(E.ClassName, ': ', E.Message);
    end;

Esta muy cerca a lo necesitado, pero me falta agregar un objeto "cabezal" para los examenes, el cual muestro en el siguiente formato.

{
"Estudios": [
{
"nombre": "hemograma",
"Fecha": "12/12/12",
"Examenes": [ <<<---- esto es lo que me falta
{
"Nombre": "hemoglobina",
"resultado": "negativo"
}
]
},
{
"nombre": "orina",
"Fecha": "12/12/12",
"Examenes": [
{
"Nombre": "hemograma",
"resultado": "negativo"
}
]
}
]
}

Cada estudio tiene nombre, fecha, y un array de examenes, y por cada examen, tiene nombre y resultado. No me estoy dando cuenta como agregar el array de examenes a cada objeto estudio.

Gracias por sus sugerencias.

lbidi 01-06-2015 18:00:14

Logre hacerlo con el siguiente codigo. Tiene 2 for para agregar datos de muestra en lugar de obtener los datos de un query, basicamente es lo mismo.

Código Delphi [-]
    try
        MainObject := TJSONObject.Create;
        try

            Array_Estudios := TJSONArray.Create;
            MainObject.AddPair(TJSONPair.Create('Estudios', Array_Estudios ) ) ;

            for i := 1 to 2 do
            begin

                Obj_Estudios := TJSONObject.Create;
                Obj_Estudios.AddPair(TJSONPair.Create('Nombre', 'hemograma' ) );
                Obj_Estudios.AddPair(TJSONPair.Create('Fecha', '01/01/15') ) ;
                Array_Estudios.Add(Obj_Estudios);

                Array_Examenes := TJSONArray.Create;
                Obj_Estudios.AddPair(TJSONPair.Create('Examenes', Array_Examenes ) ) ;
                for z := 1 to 3 do
                begin
                    Obj_Examenes := TJSONObject.Create;
                    Obj_Examenes.AddPair(TJSONPair.Create('Nombre', 'hemoglobina' ) );
                    Obj_Examenes.AddPair(TJSONPair.Create('Valor', 'negativo') );
                    Array_Examenes.Add(Obj_Examenes);
                end;

            end;
            Memo1.Text := MainObject.ToString;
        finally
            MainObject.Free;
        end;
    except
        on E: Exception do
            Writeln(E.ClassName, ': ', E.Message);
    end;


La franja horaria es GMT +2. Ahora son las 10:30:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi