注目の記事

[Android] JSONの整形ってこんなに簡単にできるの!? 〜ログが劇的に見やすくなる魔法の引数〜

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

JSON使ってますか?

モダンなアプリ開発とJSONは切っても切れない関係です。
今、この記事を見ているあなたもきっとJSONに触れたことがあるでしょう。

今回は、Android開発時に覚えておくと便利なJSONの小技を紹介します。

こんな時に使うと便利です

ネットワークとの通信を行うと、レスポンスがJSONで返ってくるってことよくありませんか?
そんなときは、大抵ログにレスポンスの内容を表示するものです。
この「ログ出力」するときに今回紹介する小技を使うと、ログが劇的に見やすくなってどんな値が入っているのかが一目でわかるようになります!

結局どうすればいいの?

実際なんてことないものなんで、さらっとご紹介します。

JSONを文字列に変換するときにJSONObject#toString()ではなく

JSONObject#toString(int indentFactor) を使う!

このindentFactorが魔法の引数です。
ここにインデントの文字数を指定します。そうすると、自動的にインデントが適用され整形された文字列を返してくれます。

こんな感じになります

動作を確認する為のサンプルコード

ハイライトになっている26行目以外はあまり気にしないでください。
単純にテキストファイルとして用意しておいたJSONのデータを読み込んでJSONObjectに変換しているだけです。
ちなみにデータの中身は山手線の駅情報です。
参考:駅データ 無料ダウンロード サービス 『駅データ.jp』

public class MainActivity extends Activity {
    
    private static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // 今回は必要ないのでレイアウトはセットしません

        AssetManager assetManager = getResources().getAssets();   
        InputStream inputStream = null;  
        BufferedReader bufferedReader = null;  

        try {
            // 事前に用意しておいた、山手線の駅情報を読み込みます
            inputStream = assetManager.open("yamanote_line.json");  
            bufferedReader = 
                    new BufferedReader(new InputStreamReader(inputStream));   
            String str = bufferedReader.readLine();
            
            // JSONObject に変換します
            JSONObject json = new JSONObject(str);
            
            // JSONObject を文字列に変換してログ出力します
            Log.d(TAG, json.toString());
            
            inputStream.close();
            bufferedReader.close();
            
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

これを実行すると…(toString()の場合)


未整形JSONログ

マトリックス!!もう、なんのこっちゃわかりません。
もちろん改行はひとつもなく、一続きの文字列のためデータ構造が非常に分かりづらいです。

小技適用!(toString(4)とした場合)

次は、JSONを整形してくれる小技を適用してみましょう。

サンプルコードの26行目の toString() を toStrong(4) としてみます。
サンプルコードの26行目の toString() を toString(4) としてみます。
(toStrong じゃなくて toString でした。すみません。。2014.8.30)

これを実行してみると…

整形JSON

なんということでしょう!

あれだけ見づらかったJSONが綺麗に整形されています。
これでJSONの中身が一目でばっちり確認できますね!!

いつも何気なく使っている JSONObject#toString() に、インデントの数を指定するだけでデバッグがはかどること間違い無しです。
ぜひ、お試しください!