###前提・実現したいこと
HTMLのheadに呼び出したJSONが空であった時にエラーを出さないよう、エスケープ処理をしたい。
###発生している問題
HTMLのhead内のコードが
<script id="ID" type="application/json"></script>
という形になるので、js側に
if ($('#ID').length) {}
と書く方法が使えず、困っています。
エラーメッセージ
Uncaught SyntaxError: Unexpected end of JSON input
###該当のソースコード
javascript
1if ($('#tagJson').length) { 2... 3}
html
1<script id="tagJson" type="application/json"> 2<!--ここが空--> 3</script>
何卒よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
とりあえずエラーを再現することが出来ました。
HTML
1<script id="tagJson" type="application/json"> 2 3 4 5</script> 6<!-- {}以外のHTMLコメントもJavaScriptコメントもJSONの仕様的にだめなのでエラーが出る -->
JavaScript
1if ($('#tagJson').length) { 2 console.log( $('#tagJson').text() ); // (空文字列) 3 var x = JSON.parse( $('#tagJson').text() ); // Uncaught SyntaxError: Unexpected end of JSON input 4 console.log( x ); 5} // エラーが出る
正規表現で {}
にマッチさせれば良いだけなきもします。どちらにせよパースに失敗する可能性があるのであれば、try...catch
文を使うのが良いと思います。
JavaScript
1if ( $('#tagJson').text().match( /[\s\S]*{[\s\S]*}[\s\S]*/g ) ) { 2 var x = JSON.parse( $('#tagJson').text() ); 3 console.log( x ); 4} // エラーが出ない
投稿2016/10/31 18:25
総合スコア69407
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/01 01:49
2016/11/01 05:29 編集
2016/11/01 05:39
2016/11/01 06:11 編集
2016/11/01 06:34
2016/11/01 07:47
2016/11/01 08:28 編集
2016/11/01 08:50
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。