Overview
最近 Android アプリを作成してまして、そうなると必然的に API から JSON
を受け取ることも多々あるわけです。
手作りのクラスもいいですが、私はめんどくさがりなので、サンプルの JSON があったら
そこから自動でクラスを生成してくれる、そんな方法を探してみました。
また、ブラウザに貼り付けて生成するようなやり方ではなく、全てローカル内で完結します。
Windows でやろうとすると面倒かもしれないです・・・。
私の環境は debian8 です。
各OSで適宜読み替えてください。
Class を生成したい sample.json を手に入れる
今回使用するサンプルは以下にしました。
http://json.org/example.html
cat sample.json
code だと空白が無視されて見づらいので、JSON は画像にしてあります。
見やすいようにフォーマットを適用する
cat sample.json | python -m json.tool > sample_formatted.json
リダイレクトする前のフォーマットされた JSON は以下です。
いつもフォーマットを適用していると見慣れてくるので安心です?
sample.json から sample.schema を生成する
json-schema-generatorを利用します。
rubyの実行環境が必要になります。
gem install json-schema-generator
json-schema-generator sample.json > sample.schema
少し長いですが、以下のような json schema が出力されます。
リダイレクトして sample.schema として保存します。
sample.schema から Java Class を生成する
jsonschema2pojoを利用します。
以下から最新の jar ファイルをダウンロードします。
https://github.com/joelittlejohn/jsonschema2pojo/releases
ダウンロードしたら、適当なディレクトリに解凍します。
Java Class を生成してみます。
jsonschema2pojo --source sample.schema --target java-gen
ls java-gen
GlossDef.java GlossDiv.java GlossEntry.java GlossList.java Glossary.java Sample.java
@Override
で自動生成されるメソッドがありますが、特に使う必要がない場合は削除した方がいいです。
利用しようと思ったらcommons IO
が必要になるかと思います。
あとは作成された .java ファイルを利用したい Android Project にコピーしたら終わりです。
Android Project で必要な Jackson library
以下が Jackson を利用にあたって必要になるライブラリです。
バージョンは利用する際に最新にした方がいいですね。
compile 'com.fasterxml.jackson.core:jackson-core:2.7.1'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.7.1'
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.1'