【エラー解決方法】JSONの文字列を読み込み中にエラー発生

JSONデータを取得して、サーバー上で処理するバッチでエラーログが出力されていました。今回はそのエラーの対処法を紹介します。

エラー内容

エラーが発生した場合にバッチからメールを送信するようにしていましたが、下記のエラーが出力されていました。

Illegal unquoted character ((CTRL-CHAR, code 9)): has to be escaped using backslash to be included in string value

エラー発生時のプログラム

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(str);

2行目のreadTreeでエラーが発生していました。

エラー発生時の環境

エラー発生時の開発環境は以下のとおりです。

言語 Java1.7.0_51

 

原因

取得したJSONデータに、エスケープされていないタブ文字が入っていたためにエラーとなっていました。

解決方法

JSONデータ内のタブ文字をエスケープすることで解消されます。エラーに記述されている”CTRL-CHAR”は、コントロールキャラクタ(制御文字)を表しています。
 
今回は”code 9″ですので、タブを表しています。下記の表に制御文字も合わせて記載しますので、エラーの状況に合わせてご確認ください。

エスケープが必要な文字

\” ダブルクォーテーション (code 34/0x22)
\\ バックスラッシュ (code 92/0x5c)
\/ スラッシュ (code 47/0x2f)
\b バックスペース (code 8/0x08)
\f 改ページ (code 12/0x0c)
\r ラインフィード (code 10/0x0a)
\n 改行・キャリジリターン (code 13/0x0d)
\t タブ (code 9/0x09)
\uXXXX 4桁の16進数で表記されたUnicode文字

まとめ

今回は受信したJSONデータがエスケープされておらず受信時にエラーとなりましたが、自分がJSONデータを送信する際にも気をつけなければならないなと感じました。
 
JSONデータを送信する際には、構文規則通りの文字列を送っているかもきちんと確認してから送りたいですね。

記事をシェア
MOST VIEWED ARTICLES