JSON 解析が失敗したときに catch ブロックを実行しないようにする
JSON の解析が Try で失敗すると、catch ブロックが実行されないようです。 また、以前は不正な JSON の解析がこれよりも問題があったこともわかりました (「このスレッド)、そのスレッドから提案された解析ロジックを取得しました。これにより、Try が期待どおりに動作するようになりますが、Try にはキャッチが実行されないという非常に特殊なシナリオがあることが問題のようです。
コード:
someVar = Try(
Parse JSON("{{1}}"),
Print("in catch 1");
2;
);
someVar2 = Try(
Throw( "broke!" ),
Print("in catch 2");
2;
);
someVar3 = Try(
txt = Log Capture( result = Parse JSON( "{{1}}") );
If( Length( txt ),
Throw( txt ) // error message
);
result; // parsed JSON
,
Print("in catch 3");
2;
);
Print("someVar is:");
Print(someVar);
Print("someVar2 is:");
Print(someVar2);
Print("someVar3 is:");
Print(someVar3);</CODE></P><P>出力:</P><P> </P><P> </P><PRE><CODE class=" language-jsl">Unexpected "{". Perhaps there is a missing }.
Line 1 Column 2: {►{1}}
"someVar is:"
.
"someVar2 is:"
2
"someVar3 is:"
2
自動化とスクリプト作成Re: JSON 解析が失敗した場合に catch ブロックを実行しないようにしてください(このコメントは間違って作成してしまいました、削除する方法がわかりません)
Re: JSON 解析が失敗した場合に catch ブロックを実行しないようにしてくださいParse JSON() はエラーをスローしないため、Try() はエラーをキャッチしません。 エラーが発生した場合はメッセージをログに出力し、欠損値を返します。
JMP の一部の関数はエラーをスローします。これは通常、エラーが深刻であり、明示的に処理する必要があるためです。 ログ メッセージ (このようなもの) を書き込む人もいますが、JSL は続行されます。 場合によっては、失敗したリターン コードが単に値が欠落しているだけである場合もあります。 ismissing() 関数を使用してテストできます。
これはメッセージ/欠落値ではなくスローであるべきだったという意見には同意しますが、これほど多くのリリースを経ても変更されることは期待できません。
Re: JSON 解析が失敗した場合に catch ブロックを実行しないようにしてくださいそれは理にかなっていると思います。 今後の読者のために、JSON の解析が成功した場合に Is Missing がスローされるため、ここでは Is Missing ではなく Is Associative Array を使用する方がよい可能性があることに注意してください。
他の言語での解析では不正な形式の JSON がスローされる傾向があり、この種のログのみの例外は完全な例外と非常によく似ているため、これがスクリプト索引に記載されていれば便利です。
Re: JSON 解析が失敗した場合に catch ブロックを実行しないようにしてください@ジュリアン- 不正な JSON を処理する方法と、それに対処するためのベスト プラクティスを文書化します。 私は思う@マットスキーそれは正しいです不足している非数値に対する厄介な障害モードがあります。