Analisi JSON a prova di erroreHo una colonna di stringhe che contiene payload JSON. Questo è il modo in cui il nostro partner memorizza i messaggi provenienti da macchine automatizzate. Il problema è che il loro database a volte riceve messaggi non JSON, quindi my :carico utile la colonna contiene righe che non possono essere analizzate semplicemente in JSON.
Ho racchiuso la mia funzione di analisi con un blocco Try ma anche in questo caso ricevo un avviso per ogni riga che include una stringa non conforme a JSON. A volte si blocca persino completamente JMP14. Potrei ignorare gli errori, ma non è un ottimo modo per scrivere codice robusto.
Local(
{ parsed = [=> ""] },
Try( parsed = Parse JSON( :payload ) );
parsed;
);Questo fallisce così gravemente. Nelle righe dove :carico utile è vuoto invece di avere una stringa JSON, restituisce un "." per qualche ragione. Non ho idea da dove venga il punto.
Esiste un modo per utilizzare le funzioni di analisi JSON in modo sicuro? Qualsiasi aiuto è apprezzato.
Nota:
Ecco alcuni esempi dei tipi di JSON con cui ho a che fare e vengono analizzati correttamente:
{"assetId":"AthensPaintLineMotor4",
"dataItemId":"Temperatura1",
"dateTime":"2018-02-22T19:44:41",
"valore":"91,51"}
{"assetId":"OKUMA-Genos-2","dateTime":"2018-04-30T11:59:13","dataItemId":"Lp1block","dataItemName":"p1block","value":" NON DISPONIBILE"}
@{"assetId":"OKUMA-Genos-2","dateTime":"2018-04-30T11:59:13","dataItemId":"Lp1MacManPanelHistory","dataItemName":"p1MacManPanelHistory","value":" 30/04/2018 07:58:12 @Cambia finestra:[26026]"}
Ri: Analisi JSON FailsafeProva la soluzione Batch Interactive @vince_faller discusso Qui . (E @Eric_Hill rispondere.)
Scriptscriptscriptscript;
Batch Interactive(1);
DatabaseCall;
Batch Interactive(0);
MoreScriptScriptScript
Ri: Analisi JSON FailsafeSono felice di sapere che questo sarà cambiato nella 14.1. Con queste modifiche ricevo ancora gli infiniti "popup di avviso". Poiché la tabella dati è lunga milioni o righe, facendo clic su OK a volte si blocca JMP14. Non c'è niente di speciale nei dati. In effetti ho inserito in sottoinsiemi una piccola parte come una tabella diversa e mentre si verificano gli stessi avvisi su quella, JMP sopravvive al problema. 
Ad ogni modo, troverò una soluzione semplice per questo. Il JSON non standard è disponibile in alcune forme prevedibili. Se posso, altrimenti queste condizioni funzioneranno bene.
Grazie per l'aiuto!
Ri: Analisi JSON FailsafeAlcuni di questi problemi verranno risolti nella prossima manutenzione 14.1. Se disponi di dati che causano l'arresto anomalo di JMP e puoi condividerli, ciò sarebbe d'aiuto. Ecco una soluzione per ora:
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
);
Funziona utilizzando il file LogCapture funzione per acquisire qualsiasi output di registro da Analizzare JSON funzione e lanciandolo come errore. IL Spettacolo (...) è facoltativo; msg_eccezione è una variabile speciale con il valore che è stato generato da lancia(txt) o da JMP per qualche altro errore.
IL "?" potrebbe essere sostituito da [ => ] o da qualche altro valore che abbia senso per te.
Nella stringa del payload ho utilizzato le virgolette non elaborate "\[ e ]\", quindi non avrei avuto bisogno di evitare le virgolette nei miei dati di test. Non ne hai bisogno per i dati già presenti in una tabella dati.