質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1535閲覧

JavaScript JSON.parseのエラー探知/スキップ

thiz

総合スコア2

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/06/13 16:07

編集2021/06/13 16:18

前提・実現したいこと

JSON.parseする際に文字列の形式が違いエラーが発生してるかどうかの分岐処理がしたいです
下記のように記述しましたがエラー探知はできません
やりたいことはエラーが出た場合に違う処理を実行するという事です
詳しい方教えていただけませんでしょうか

追記
このようなコードでエラーを探知させることはできた
しかしエラーのalertを表示したあとにhelloが実行されてしまう
どうしたらエラー発生時と発生してない状態で処理を分けられるのか

<script> window.onload=function(){ str='{a":"b"}'; try { const json = JSON.parse(str); } catch (error) { alert("error"); } alert("hello"); } </script>

該当のソースコード

<script> window.onload=function(){ str='{a":"b"}';//わざとエラーを発生させる エラーが出るとalertは実行されず処理が止まる str=JSON.parse(str); alert("hello"); } </script> <script> window.onload=function(){ str='{a":"b"}'; if(JSON.parse(str)){//エラーが出るかどうかの条件分岐を考えたけど動かず alert(str.a); }else{ alert("error"); } </script>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

try...catchを試してみてください。try-catchの参考

上記の場合だと

js

1<script> 2window.onload=function(){ 3str='{a":"b"}'; 4try{ 5 JSON.parse(str); 6} catch(error){ 7 alert("hello"); 8} 9} 10</script>

のようにすれば良いように思います。

投稿2021/06/13 16:21

nobkz

総合スコア320

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thiz

2021/06/13 16:38

勉強します
guest

0

ベストアンサー

try-catch文というものはご存じでしょうか??tryブロックの中(下のコードで言うとstr = JSON.parse(str);)でエラーが発生したときに、catchブロックの中の処理を実行するというものです。

Javascript

1try { 2 str = JSON.parse(str); 3} catch { 4 alert(str.a); 5}

(追記)質問の追記を見ました。(聞きたいことはコメントくださると助かります)
この場合はエラーが発生したらその場で関数の実行が終了すればよいのだと思うので、catchブロックの中でreturn false;してはいかがでしょう??

投稿2021/06/13 16:16

編集2021/06/13 16:21
hallen0225

総合スコア587

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thiz

2021/06/13 16:21

教えて下さったコードですとundefinedとアラートがでますが、もし、undefinedであればエラーが出ているという記述を別途する必要がありますか?
thiz

2021/06/13 16:29 編集

条件分岐で処理を続けさせたいんですが、 例えば作りとしては下記のような形にしたいです エラーは探知できますが、okが出ません よろしければ教えていただけませんでしょうか <script> window.onload=function(){ str='{a":"b"}';// {"a":"b"}OKになるはずの記述 try { str = JSON.parse(str); } catch { if(typeof str.a==='undefined') { alert("error"); }else{ alert(str.a);//OK } } } </script>
hallen0225

2021/06/13 16:30 編集

ここで、"str.a"の値がundefinedなので、undefinedと出るのは当然です。 (strには、JSONから得られたオブジェクトが入るわけですが、ここでは変換に失敗しているので、strには元の文字列がそのまま入っています。よって、str.aに相当するものが存在しないためです) undefinedかどうかを判定するまでもなく、catchブロックに到達した時点でエラーが出ていることは明らかなので、undefinedであることを判定する必要はありません。 "alert(str.a);"の代わりに、"alert("文字列の変換に失敗しました")のように、表示したいエラーメッセージを出せばよいのではないでしょうか???
hallen0225

2021/06/13 16:32 編集

"OK"というメッセージはどのようなときに出したいのですか? JSON.parseに成功したときに出したいのであれば、回答に追記した通り、catchブロックに"return false;"を追記して、 try { str = JSON.parse(str); } catch { alert(str.a); return false; } alert("OK"); とすれば、エラーが発生していないときには"undefined"のアラートは出なくなります。
thiz

2021/06/13 16:33

すみません、初心者でよくわかってなくて。。 retrun falseするとはこういうことですか?動きません <script> window.onload=function(){ str='{a":"b"}'; try { const json = JSON.parse(str); } catch (error) { alert("error"); retrun false; } alert("hello"); } </script>
hallen0225

2021/06/13 16:35 編集

"retrun"のスペルが間違っています。"return"です。 (もらったソースコードはコピペした方がよいです)
thiz

2021/06/13 16:36

try { str = JSON.parse(str); } catch { alert(str.a); return false; } alert("OK"); できました。 もっと勉強します ありがとうございました!
hallen0225

2021/06/13 16:43

無事出来たようでよかったです。 「動きません」だけでなく、どこでどういうエラーが出て動かないのか見れるとよいですね。(ブラウザの「開発者ツール」というもので見られます。調べてみてください))
thiz

2021/06/13 17:04 編集

ありがとうございます。 新たな問題が発覚しました。 strにnullを設定したら、エラー探知がききません なぜでしょうか? <script> window.onload=function(){ str=null; try { str = JSON.parse(str); } catch { alert("えらー"); return false; } alert("OK"); } </script>
thiz

2021/06/13 17:00

strがnullだったらエラーにしたい場合どうしたらいいんでしょうか?
hallen0225

2021/06/13 17:08

JSON.parse("null")はエラーが出ないようですね。 ここでは、"str = JSON.parse(str);"ではstrにnull(文字列ではありません)が代入されて、処理が正常終了してしまっています。そのため、catchブロックに遷移せず、"OK"が出てしまうようです。 参考:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#examples もし、(偶然にも)"null"という文字列が出ることがあり得るのであれば、 str = "null"; //わざとエラーを発生させる try { str = JSON.parse(str); if (str === null) { alert("えらー"); return false; } } catch { alert(str.a); return false; } でしょうか。
hallen0225

2021/06/13 17:09

> strがnullだったらエラーにしたい場合どうしたらいいんでしょうか? 普通にif文でalertを出せばいいのだと思いますが。(入れ違いでソースを書いてしまいましたが)
thiz

2021/06/14 03:06

ありがとうございました! 感謝します
peyo

2024/02/22 08:32

try - catchを用いるのは非同期のイメージでしたが、今回の場合でも、try - catchを使用するのが一般的なのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問