PDA

Ver la Versión Completa : JSON en aplicacion Delphi


Cecil
13-09-2008, 12:37:45
Como bien dice el título, necesito leer el un fichero JSON. He estado buscando y me he topado con la libreria lkJSON 1.04. Las he instalado bien y demás. El gran problema es al comenzar a usarlas, no se por donde empezar y no encuentro una buena guía para dicha labor. ¿Alguien ha usado esta libreria y sabría explicarme un poco por donde empezar? o ¿alguien me recomienda alguna mejor?. Gracias por vuestro tiempo.

:)

xEsk
13-09-2008, 14:09:36
Hola, con la libreria vienen algunos ejemplos (aunque a mi no me sirvieron de mucho xD).

En un JSON puede haber objetos simples y arrays. Asi pues, puedes encontrarte un JSON que sea sólo un objeto, o un JSON que todo él sea un array o que el JSON sea un mix entre objetos simples y arrays, etc...

Ejemplo de como obtener los objetos principales de un JSON mixto:
var
JSON: TlkJSONobject;
UnObjetoJSON: TlkJSONobject;
UnArrayJSON,
OtroArrayJSON: TlkJSONlist;
n, i: Integer;

begin
JSON:=TlkJSONobject.Create;
try
// parseamos el JSON
JSON:=TlkJSON.ParseText(ContenidoJSON) as TlkJSONobject;

// Obtenemos los objetos JSON principales
UnObjetoJSON:=JSON.Field['nombreObjetoJSON'] as TlkJSONobject;
UnArrayJSON:=JSON.Field['nombreArrayJSON'] as TlkJSONlist;
OtroArrayJSON:=JSON.Field['nombreOtroArrayJSON'] as TlkJSONlist;
// ahora ya podemos obtener el contenido de estos 3 objetos JSON

// ejmplo chorra de obtener un valor de un objeto "normal" JSON
if UnObjetoJSON.Field['nombreField'].Value = 'Pepito' then
begin
// ...
end;

// para recorrer un JSON que es un array, usamos algo asi
for n:=0 to UnArrayJSON.Count - 1 do
if UnArrayJSON.Child[n].Field['nombreField'].Value = 'Pepito' then
begin
// ...
end;

// si se diera el caso que un objeto JSON (sea normal o array) tiene otro(s) array(s) dentro, es tan facil como...
for n:=0 to OtroArrayJSON.Count - 1 do
for i:=0 to OtroArrayJSON.Child[n].Count - 1 do
// y asi, at infinitum...
finally
JSON.Free;
end;

Esto que he hecho de separar los 3 objetos principales (3, porque era un ejemplo... pero pueden ser cualquier valor) lo hago para que me sea mas facil saber con que estoy trabajando, pero no es necesario.

Si el JSON que vas parsear, es todo él un Array, al parsearlo ya lo puedes asignar a un TlkJSONlist, por ejemplo:

JSON:=TlkJSON.ParseText(ContenidoJSON) as TlkJSONlist;

Bueno, espero que te sirvan estos ejemplos iniciales (tarde mi tiempo en sacarlo, no encontre ayuda por ningún lado xD)... si no puedes con ello, dimelo xD Pones un ejemplo del JSON que quieres parsear, y te intento ayudar.

Saludos.

Cecil
15-09-2008, 09:43:29
Muchisimas gracias, tus ejemplos me han ayudado a entender mejor esto. :)

noelia89
13-09-2012, 22:08:42
Hola! cómo estan?

Hay forma de hacer esto que ustedes detallan sin necesidad de usar TlkJSON, osea directamente con DBXJSON que trae delphi?
Estoy intentando hacerlo y no puedo listar los objetos que están dentro de otros objetos, me lista solo los principales.

Esto hago:

for I := 0 to JSON2.Size - 1 do
begin
MObj.Lines.Add(JSON2.Get(I).JsonString.Value + ' : ' + JSON2.Get(I).JsonValue.Value);
end;

JSON2 es un TJSONobject.

Gracias!!

Casimiro Notevi
13-09-2012, 22:31:37
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)