故障安全 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”,“value”:“ 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 处理其他错误。
这 ”?”可以替换为 [ => ] 或其他对您有意义的值。
在有效负载字符串中,我使用了原始字符串引号“\[和]\”,因此我不需要在测试数据中转义引号。 对于数据表中已有的数据,您不需要这样做。