Análisis JSON a prueba de fallosTengo una columna de cadena que tiene cargas útiles JSON en ella. Esta es la forma en que nuestro socio almacena mensajes de máquinas automatizadas. El problema es que su base de datos a veces recibe mensajes que no son JSON, por lo que mi :carga útil la columna tiene filas que no se pueden analizar a JSON simplemente.
Envolví mi función de análisis con un bloque Try, pero incluso así recibo una alerta por cada fila que incluye una cadena que no cumple con JSON. Incluso se bloquea JMP14 completamente a veces. Podría ignorar los errores, pero no es una buena forma de escribir código robusto.
Local(
{ parsed = [=> ""] },
Try( parsed = Parse JSON( :payload ) );
parsed;
);Esto falla tan mal En filas donde :carga útil está vacío en lugar de tener una cadena JSON, devuelve un "." por alguna razón. No tengo idea de dónde viene el punto.
¿Hay alguna manera de usar las funciones de análisis JSON de una manera segura? Cualquier ayuda es apreciada.
Nota:
Aquí hay algunos ejemplos de los tipos de JSON con los que estoy tratando y se analizan correctamente:
{"assetId": "AthensPaintLineMotor4",
"dataItemId": "Temperature1",
"dateTime": "2018-02-22T19: 44: 41",
"valor": "91.51"}
{"assetId": "OKUMA-Genos-2", "dateTime": "2018-04-30T11: 59: 13", "dataItemId": "Lp1block", "dataItemName": "p1block", "value": " INDISPONIBLE"}
@{"assetId": "OKUMA-Genos-2", "dateTime": "2018-04-30T11: 59: 13", "dataItemId": "Lp1MacManPanelHistory", "dataItemName": "p1MacManPanelHistory", "value": " 2018/04/30 07:58:12 @ Ventana de cambio: [26026] "}
Re: análisis JSON a prueba de fallosPrueba la solución Batch Interactive @vince_faller discutido aquí . (Y @Eric_Hill respuesta.)
Scriptscriptscriptscript;
Batch Interactive(1);
DatabaseCall;
Batch Interactive(0);
MoreScriptScriptScript
Re: análisis JSON a prueba de fallosMe alegra saber que esto se cambiará en 14.1. Con estos cambios todavía recibo las interminables "ventanas emergentes de alerta". Debido a que la tabla de datos tiene una longitud de millones o filas, al hacer clic en Aceptar, a veces se bloquea JMP14. No hay nada especial en los datos. De hecho, subcontraté una pequeña parte como una tabla diferente y, aunque las mismas alertas están sucediendo en eso, JMP sobrevive al problema. 
De todos modos, voy a encontrar una solución simple para esto. El JSON no estándar viene en algunas formas predecibles. Si puedo, si no, estas condiciones funcionarán bien.
Gracias por la ayuda!
Re: análisis JSON a prueba de fallosAlgo de esto se arregla en el próximo mantenimiento 14.1. Si tiene datos que colapsan JMP y puede compartirlos, eso ayudaría. Aquí hay un trabajo alrededor por ahora:
payload = "\[
{
]\"; // malformed JSON
Try(
txt = Log Capture( result = Parse JSON( payload ) );
If( Length( txt ),
Throw( txt ) // error message
);
result; // parsed JSON
,
Show( exception_msg );
"?" // returned value for malformed JSON
);
Esto funciona usando el LogCapture función para capturar cualquier salida de registro de la Parse JSON Funciona y tirando eso como un error. los Show (...) es opcional; exception_msg es una variable especial con el valor que fue lanzado, ya sea por lanzar (txt) o por JMP por algún otro error.
Los "?" podría reemplazarse por [=>] o algún otro valor que tenga sentido para usted.
En la cadena de carga útil, utilicé las comillas sin formato de cadena "\ [y] \", por lo que no tendría que dejar comillas entre los datos de prueba. No es necesario para los datos que ya están en una tabla de datos.