PowerBuilder
Procesamiento dinámico de JSON en PowerBuilder 2025 R2

0 visualizaciones
Demo técnico de PowerBuilder 2025 R2
Consumir una API no termina al recibir su respuesta. Una aplicación empresarial también debe validar el JSON, descubrir su estructura, recorrer objetos y arreglos, conservar UTF-8 y convertir los datos en información útil. Demo_json_pb reúne ese flujo en una interfaz visual basada en las clases nativas JSONParser, CoderObject y WebBrowser.
La ventana principal presenta el JSON crudo, un árbol navegable, las rutas detectadas y los valores extraídos.
El problema que resuelve el demo
Las respuestas de una API suelen mezclar valores simples, objetos anidados, arreglos y valores nulos. Si cada acceso se programa con una ruta fija, el código queda estrechamente acoplado a una sola respuesta. Este demo inspecciona cualquier JSON válido en tiempo de ejecución y genera rutas reutilizables como /seller_address/state/name o /pictures/*/secure_url.
Arquitectura y responsabilidades
La lógica JSON permanece en el NVO. La ventana visual solamente organiza acciones y estado, por lo que el gestor puede reutilizarse desde otras ventanas, procesos por lotes o integraciones HTTP.
Carga y validación con JSONParser
of_cargar_json crea un analizador limpio, carga la cadena y devuelve el mensaje producido por LoadString. Una cadena vacía significa que la estructura es válida.
1String ls_error23If IsValid(i_json) Then Destroy i_json4i_json = Create JSONParser5ls_error = i_json.LoadString(as_json)67Return ls_error
La ventana conserva una copia del contenido validado en is_json_crudo. Antes de extraer valores, comprueba que el usuario no haya modificado el editor; así evita consultar un árbol que ya no representa el texto visible.
Descubrimiento recursivo de rutas
El recorrido comienza con GetRootItem(). Para cada nodo, GetItemType() determina si se trata de un objeto, un arreglo o un valor final. Los objetos se recorren mediante GetChildKey() y GetChildItem(); los arreglos sustituyen el índice concreto por el comodín *.
1Choose Case le_tipo2 Case JsonObjectItem!3 ls_clave = i_json.GetChildKey(al_item, ll_indice)4 ll_hijo = i_json.GetChildItem(al_item, ll_indice)5 of_recorrer_rutas(ll_hijo, ls_ruta_hija, as_rutas)67 Case JsonArrayItem!8 ls_ruta_hija = as_ruta + "/*"9 of_recorrer_rutas(ll_hijo, ls_ruta_hija, as_rutas)10End Choose
El comodín unifica elementos con la misma estructura. Por ejemplo, tres fotografías generan una sola opción /pictures/*/url, no tres rutas redundantes. of_agregar_ruta_unica evita duplicados y of_escapar_clave_ruta protege las barras que formen parte del nombre real de una clave.
Expansión de arreglos y extracción tipada
Cuando el usuario elige una ruta con /*, of_expandir_ruta localiza el arreglo, obtiene su cantidad real de elementos y reemplaza el comodín por índices compatibles con JSONParser.GetItemByPath. La recursión permite resolver más de un arreglo dentro de la misma ruta.
1ll_total = i_json.GetChildCount(ll_arreglo)2For ll_indice = 1 To ll_total3 ls_ruta_resuelta = ls_prefijo + "/" + String(ll_indice) + ls_sufijo4 ls_resultado += of_expandir_ruta(ls_ruta_resuelta)5Next
Al llegar a una ruta exacta, of_obtener_valor_ruta convierte el dato según su tipo nativo.
Visualización HTML dentro de WebBrowser
of_generar_html_navegable construye una página autocontenida con elementos details y summary. JavaScript recrea el árbol, muestra la cantidad de miembros y aplica un color distinto a cadenas, números, booleanos y valores nulos.
Para conservar acentos y caracteres especiales, el JSON y el HTML se convierten explícitamente a Blob con EncodingUTF8!. Después, CoderObject.Base64Encode produce una URI de datos que puede navegarse sin crear archivos temporales.
1lblb_html = Blob(ls_html, EncodingUTF8!)2ls_html_base64 = lnv_codificador.Base64Encode(lblb_html)34Return "data:text/html;charset=utf-8;base64," + ls_html_base64
Generación de código PowerBuilder
Después de extraer las rutas seleccionadas, el NVO genera un script que crea nvo_gestor_json, carga la respuesta y agrega una llamada a of_extraer_valores por cada selección. El resultado incluye la cabecera de documentación requerida y todas las variables al principio del script.
w_codigo_json permite revisar y copiar el código correspondiente a las rutas elegidas en la ventana principal.
Flujo completo de ejecución
• El usuario simula la respuesta GET o pega un JSON propio.
• w_demo_json envía el contenido a nvo_gestor_json.of_cargar_json.
• El gestor recorre el árbol y devuelve una lista única de rutas dinámicas.
• La ventana genera el HTML UTF-8 y lo muestra mediante WebBrowser.Navigate.
• El usuario selecciona una o varias rutas; los comodines se expanden a índices reales.
• Los valores se presentan como ruta = valor y se crea el script equivalente.
• w_codigo_json muestra el código y permite copiarlo para reutilizarlo.
Aplicaciones prácticas
• Explorar respuestas desconocidas durante la integración con una API.
• Generar mapeos de campos sin codificar de antemano la estructura completa.
• Diagnosticar cambios en contratos JSON y localizar rutas ausentes.
• Construir asistentes para integraciones, pruebas y documentación técnica.
• Reutilizar el mismo NVO con respuestas obtenidas mediante HTTPClient.
Conclusión
Demo_json_pb demuestra que PowerBuilder 2025 R2 puede procesar JSON dinámico sin bibliotecas externas. La combinación de JSONParser, recorrido recursivo, rutas con comodines, codificación UTF-8, HTML embebido y generación de código convierte una respuesta compleja en un flujo visible y reutilizable. La separación entre el NVO y las ventanas mantiene la solución clara y facilita llevar el mismo patrón a integraciones reales.