フェイルセーフJSON解析JSONペイロードを含む文字列列があります。 これは、パートナーが自動化されたマシンからのメッセージを保存する方法です。 問題は、彼らのデータベースが時々非JSONメッセージを受け取ることです。 :ペイロード列には、JSONに単純に解析できない行があります。
解析関数をTryブロックでラップしましたが、それでも、JSONに準拠していない文字列を含む行ごとにアラートが表示されます。 JMP14が完全にクラッシュすることもあります。 エラーは無視できますが、それは堅牢なコードを書くための優れた方法ではありません。
Local(
{ parsed = [=> ""] },
Try( parsed = Parse JSON( :payload ) );
parsed;
);これはひどく失敗します。 行で:ペイロードJSON文字列ではなく空の場合、「。」を返します。何らかの理由で。 ドットがどこから来たのかわかりません。
JSON解析関数をフェイルセーフな方法で使用する方法はありますか? どんな助けでも大歓迎です。
ノート:
これが私が扱っているJSONの種類のいくつかの例であり、それらは適切に解析されます:
{"assetId": "AthensPaintLineMotor4"、
"dataItemId": "Temperature1"、
"dateTime": "2018-02-22T19:44:41"、
"値": "91.51"}
{"assetId": "OKUMA-Genos-2"、 "dateTime": "2018-04-30T11:59:13"、 "dataItemId": "Lp1block"、 "dataItemName": "p1block"、 "value": "利用できません"}
{"assetId": "OKUMA-Genos-2"、 "dateTime": "2018-04-30T11:59:13"、 "dataItemId": "Lp1MacManPanelHistory"、 "dataItemName": "p1MacManPanelHistory"、 "value": " 2018/04/30 07:58:12 @change Window:[26026] "}
Re:フェイルセーフJSON解析バッチインタラクティブソリューションをお試しください@vince_faller議論されたここ。 (と@Eric_Hill返事。)
Scriptscriptscriptscript;
Batch Interactive(1);
DatabaseCall;
Batch Interactive(0);
MoreScriptScriptScript
Re:フェイルセーフJSON解析これは14.1で変更されると聞いてうれしいです。 これらの変更を加えても、無限の「アラートポップアップ」が表示されます。 データテーブルは数百万または行の長さであるため、[OK]をクリックするとJMP14がクラッシュすることがあります。 データについて特別なことは何もありません。 実際、私は小さな部分を別のテーブルとしてサブセット化し、同じアラートがその上で発生している間、JMPは問題を乗り越えます。 
とにかく、私はこれの簡単な回避策を見つけるつもりです。 非標準のJSONには、いくつかの予測可能な形式があります。 もし私ができれば-そうでなければこれらの条件はうまくいくでしょう。
助けてくれてありがとう!
Re:フェイルセーフJSON解析この一部は、今後の14.1メンテナンスで修正されます。 JMPをクラッシュさせて共有できるデータがある場合は、それが役立ちます。 今のところ回避策は次のとおりです。
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
);
これは、 LogCaptureからのログ出力をキャプチャする関数JSONを解析する関数とそれをエラーとしてスローします。 The見せる(...)はオプションです。 exception_msgは、によってスローされた値を持つ特別な変数です。 throw(txt)または他のエラーの場合はJMPによって。
「?」 [=>]またはあなたにとって意味のある他の値に置き換えることができます。
ペイロード文字列では、生の文字列引用符 "\[および]\"を使用したため、テストデータで引用符をエスケープする必要はありません。 すでにデータテーブルにあるデータには必要ありません。