Ausfallsicheres JSON-ParsingIch habe eine Zeichenfolgenspalte, die JSON-Nutzlasten enthält. Auf diese Weise speichert unser Partner Nachrichten von automatisierten Maschinen. Das Problem ist, dass ihre Datenbank manchmal Nicht-JSON-Nachrichten erhält, also meine :Nutzlast Die Spalte enthält Zeilen, die nicht einfach in JSON geparst werden können.
Ich habe meine Parse-Funktion mit einem Try-Block umschlossen, erhalte aber selbst dann eine Warnung für jede Zeile, die eine nicht JSON-kompatible Zeichenfolge enthält. Manchmal stürzt JMP14 sogar vollständig ab. Ich könnte Fehler ignorieren, aber das ist keine gute Möglichkeit, robusten Code zu schreiben.
Local(
{ parsed = [=> ""] },
Try( parsed = Parse JSON( :payload ) );
parsed;
);Das scheitert so sehr. In Reihen wo :Nutzlast leer ist, anstatt einen JSON-String zu haben, wird ein „.“ zurückgegeben. aus irgendeinem Grund. Ich habe keine Ahnung, woher der Punkt kommt.
Gibt es eine Möglichkeit, JSON-Parsing-Funktionen ausfallsicher zu nutzen? Jede Hilfe wird geschätzt.
Notiz:
Hier sind einige Beispiele für die Arten von JSON, mit denen ich zu tun habe, und sie werden ordnungsgemäß analysiert:
{"assetId": "AthensPaintLineMotor4",
„dataItemId“: „Temperatur1“,
„dateTime“: „2018-02-22T19:44:41“,
„Wert“: „91,51“}
{"assetId": "OKUMA-Genos-2", "dateTime": "2018-04-30T11:59:13", "dataItemId": "Lp1block", "dataItemName": "p1block", "value": NICHT VERFÜGBAR"}
{"assetId": "OKUMA-Genos-2", "dateTime": "2018-04-30T11:59:13", "dataItemId": "Lp1MacManPanelHistory", "dataItemName": "p1MacManPanelHistory", "value": 30.04.2018 07:58:12 @change Window:[26026]"}
Betreff: Ausfallsicheres JSON-ParsingProbieren Sie die Batch Interactive-Lösung aus @vince_faller besprochen Hier . (Und @Eric_Hill Antwort.)
Scriptscriptscriptscript;
Batch Interactive(1);
DatabaseCall;
Batch Interactive(0);
MoreScriptScriptScript
Betreff: Ausfallsicheres JSON-ParsingIch freue mich zu hören, dass dies in 14.1 geändert wird. Mit diesen Änderungen erhalte ich immer noch die endlosen „Alarm-Popups“. Da die Datentabelle Millionen oder Zeilen lang ist, stürzt JMP14 beim Klicken auf „OK“ manchmal ab. An den Daten ist nichts Besonderes. Tatsächlich habe ich einen kleinen Teil in eine andere Tabelle unterteilt, und obwohl dort dieselben Warnungen auftreten, überlebt JMP das Problem. 

Wie auch immer, ich werde eine einfache Problemumgehung dafür finden. Das nicht standardmäßige JSON gibt es in einigen vorhersehbaren Formen. Wenn ich diese Bedingungen erfüllen kann, funktioniert es einwandfrei.
Vielen Dank für die Hilfe!
Betreff: Ausfallsicheres JSON-ParsingEiniges davon wird in der kommenden 14.1-Wartung behoben. Wenn Sie Daten haben, die JMP zum Absturz bringen, und diese teilen können, wäre das hilfreich. Hier ist eine Lösung für den Moment:
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
);
Dies funktioniert mit der LogCapture Funktion zum Erfassen aller Protokollausgaben von JSON analysieren Funktion und werfen das als Fehler. Der Zeigen (...) es ist optional; Ausnahme_Nachricht ist eine spezielle Variable mit dem Wert, der entweder von ausgelöst wurde werfen(txt) oder von JMP für einen anderen Fehler.
Der "?" könnte durch [ => ] oder einen anderen Wert ersetzt werden, der für Sie sinnvoll ist.
In der Nutzlastzeichenfolge habe ich die Rohzeichenfolge-Anführungszeichen „\[ und ]\“ verwendet, damit ich in meinen Testdaten keine Escape-Anführungszeichen verwenden muss. Für Daten, die sich bereits in einer Datentabelle befinden, ist dies nicht erforderlich.