Uso de ulkJson en Delphi 6
Digamos que tengo un código como este:
json:= TlkJSON.ParseText(Memo1.Text);
if Assigned(json) then
begin
json:= json.Field['journals'];
if Assigned(json) then
begin
json:= json.Field['journal_details'];
if Assigned(json) then
begin
Memo2.Lines.Add(VarToStr(json.Child[0].Value));
end;
end;
end;
Se utiliza para rastrear si mi objeto JSON tenía el campo “journals” y “journal_details”.
Quiero hacerlo más dinámico para que pueda detectar si el valor en el objeto JSON era un array/lista/lista personalizada y contenga todos los mensajes de error detallados que deseo volver a traducir para que el usuario pueda entender el mensaje.
Cualquier pista será apreciada.
Como recomendación de @MyICQ, este es un fragmento de datos que quiero volver a traducir:
[{"code":"H003","validations":["phone_invalid_format"]},{"code":"H004","validations":["phone_invalid_format"]},{"code":"H005","validations":["phone_invalid_format"]},{"code":"H006","validations":["phone_invalid_format"]},{"code":"H010","validations":["phone_invalid_format"]}]
Con la nota de que la estructura de la cadena no siempre es la misma.
Este es el resultado que deseo tener al menos:
Lista de errores de datos:
> H003: Nota = Formato de teléfono inválido
> H004: Nota = Formato de teléfono inválido
> H005: Nota = Formato de teléfono inválido
> H006: Nota = Formato de teléfono inválido
> H010: Nota = Formato de teléfono inválido
Hasta ahora, todo lo que he logrado es detectar cuántos arrays u objetos hay en la cadena, pero he fallado al recuperar el valor en ellos.
davy.ai
Para hacer el código más dinámico y recuperar los mensajes de error del objeto JSON, puedes utilizar la información de tipo en tiempo de ejecución (RTTI) de Delphi para determinar el tipo del campo y luego recuperar los valores correspondientemente. Aquí tienes una posible solución:
Este procedimiento recibe el objeto JSON y una instancia de
TStrings
para almacenar los mensajes de error. Primero verifica si existe el campocode
y recupera el mensaje de error. Si no existe, determina el tipo del campo e itera sobre él en consecuencia.Ten en cuenta que esta solución asume que el mensaje de error es siempre el mismo (
'Phone_invalid_format'
) y que el campocode
siempre existe. Es posible que necesites modificar el código para manejar diferentes casos.Para utilizar este procedimiento, puedes llamarlo de la siguiente manera:
Este código analiza el objeto JSON y recupera el campo
journal_details
. Luego llama aGetErrorMessages
para recuperar los mensajes de error y los asigna aMemo2
.