How to copy array values from JSon to object using DTL?
Hi community,
I need to create a DTL to get values from a JSon (%DynamicObject) to a class.
Thre first items is copied fine, however when it tries to get the values from an array it raises an error.
{ "resultado": "OK", "retorno": { "mensaje": "Info recuperado correctamente", "datos": { "idUsuario": "ID-88556", "fechanacimiento": "1970-02-01", "nombreUsuario": "FRANCISCO", "apellidosUsuario": "LOPEZ", "polizas": { "poliza": [ { "sucursal": "MAD", "oficina": "01", "poliza": "12345678", }, { "sucursal": "BCN", "oficina": "34", "poliza": "99556151", } ] } } } }
When the DTL gets the "poliza" array, it throws the following error.
ERROR <Ens>ErrException: <INVALID OREF>zTransform+16^MyApp.DT.JsonToPoliciesResponse.1 -- - registrado como '-' número - @' Set k1=source.retorno.datos.polizas.poliza.Next(k1)'
is there any way to create a "loop", "for each" or whatever to iterate into?
Best regard,
Francisco Lopez
Hi Francisco,
You will need to create an iterator from the poliza %DynamicArray property, e.g.
You can then do a %GetNext(.key,.value) over the iterator where value will be a %DynamicObject that has the properties sucursal etc.
The other option would be to use the ZEN jsonProvider to deserialise the entire object for you, bypassing the need for the DTl.
So it is not possible to do in a DTL?
As you say, I need to do it as code, instread of DTL.
Thanks for the answer
Good point.
I'll do it.
Maybe is not elegant, but this idea is from a gentleman, so it has glamour
Best regards,
Francisco Lopez
Just an FYI - you can used code as part of a DTL by adding a Code action:
Francisco,
instead of FOR EACH which obviously uses a nonexisting Next method
you could create a loop using <WHILE> and do a "manual" loop.
For the condition source.retorno.datos.polizas.poliza.%Size() gives you the index limit
and source.retorno.datos.polizas.poliza.%Get(idx).sucursal .... and similar provides the content.
You have to increment idx manually and it runs from 0 (zero!) to %Size()-1
It's not as elegant as <foreach> but you have control over your JSON input.