故障安全 JSON 解析我有一個字串列,其中包含 JSON 有效負載。 這是我們的合作夥伴儲存來自自動化機器的訊息的方式。 問題是他們的資料庫有時會收到非 JSON 訊息,所以我的:有效負載列中包含無法簡單解析為 JSON 的行。
我用 Try 區塊包裝了解析函數,但即便如此,我也會收到包含不符合 JSON 的字串的每一行的警報。 有時甚至會使 JMP14 完全崩潰。 我可以忽略錯誤,但這不是編寫健全程式碼的好方法。
Local(
{ parsed = [=> ""] },
Try( parsed = Parse JSON( :payload ) );
parsed;
);這太失敗了。 在行中,其中:有效負載為空而不是 JSON 字串,它傳回一個“.”因為某些原因。 我不知道這個點是從哪裡來的。
有沒有一種方法可以以故障安全的方式使用 JSON 解析函數? 任何幫助表示讚賞。
筆記:
以下是我正在處理的 JSON 類型的一些範例,它們得到了正確的解析:
{“assetId”:“AthensPaintLineMotor4”,
"dataItemId":"溫度1",
"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”,“ 2018/04/30 07:58:12 @更改視窗:[26026]"}
回覆:故障安全 JSON 解析嘗試批量互動解決方案@vince_faller討論過這裡。 (和@埃里克希爾回覆.)
Scriptscriptscriptscript;
Batch Interactive(1);
DatabaseCall;
Batch Interactive(0);
MoreScriptScriptScript
回覆:故障安全 JSON 解析我很高興聽到這將在 14.1 中改變。 透過這些更改,我仍然會收到無盡的「警報彈出視窗」。 由於資料表長達數百萬行或數百萬行,因此按一下「確定」有時會導致 JMP14 崩潰。 數據上沒有什麼特別的。 事實上,我將一小部分子集作為不同的表,雖然在該表上發生了相同的警報,但 JMP 解決了這個問題。 
無論如何,我會為此找到一個簡單的解決方法。 非標準 JSON 有幾種可預測的形式。 如果我可以 if-else 這些條件,它會運作得很好。
感謝您的幫忙!
回覆:故障安全 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
);
這是透過使用日誌採集函數捕獲任何日誌輸出解析 JSON函數並將其作為錯誤拋出。 這展示(...) 是可選的;例外訊息是一個特殊變量,其值被拋出,或由拋出(txt)或透過 JMP 處理其他錯誤。
這 ”?”可以替換為 [ => ] 或其他對您有意義的值。
在有效負載字串中,我使用了原始字串引號“\[和]\”,因此我不需要在測試資料中轉義引號。 對於數據表中已有的數據,您不需要這樣做。