Javaで文字列がJSONかをチェックする方法

こんにちは、さるまりんです。

とあるAPIからデータを取得するプログラムを書いていました。

問題なく成功するとjson文字列を返却してくれるのですが、何かおかしなことが起こっていると、HTML文字列を返却してきたり、「エラーがおきました」のようなただのテキストを返却してくるのです。

なので、成功として処理を始める前の受け取った文字列がjsonかというチェックを行うことになりました。その方法を2つ、メソッドにしてメモしておきます。

方法1 JSONObjectJSONArrayを作ってみる。

org.json.JSONObjectorg.json.JSONArrayをとりあえず作ってみて、成功するか否かで文字列がJSON文字列かを判断します。

引数のtestの文字列がJSONではない場合はJSONObjectJSONArrayのコンストラクタ呼び出しの際にJSONExceptionが発生します。無事発生せずオブジェクトができたらJSON文字列です。

public boolean isJSON(String test) {
    try {
        new JSONObject(test);
    } catch (JSONException exo) {
        try {
            new JSONArray(test);
        } catch (JSONException exa) {
            return false;
        }
    }
    return true;
}

方法2 Jacksonライブラリを使う。

こちらの方法も作ってみてできるかどうかで判断します。

こちらではJSONを扱うJavaライブラリのJacksonを使います。

com.fasterxml.jackson.databind.ObjectMapperを使って文字列をツリーに読み込めたらOK、それ以外はNGとしています。

public boolean isJSON(String test) {
    try {
        ObjectMapper mapper = new ObjectMapper();
        mapper.readTree(test);
    } catch (IOException e) {
        return false;
    }
    return true;
}

例外が発生するとエラー。その通りなのですが、それを適切に処理することでプログラムをシンプルに作ることができます。例外処理ってとっても便利で大切なんですね。

読んでくださってありがとうございました。

ではまた!