LoginSignup
19
23

More than 5 years have passed since last update.

Java の JSON Class 自動生成

Last updated at Posted at 2016-02-27

Overview

最近 Android アプリを作成してまして、そうなると必然的に API から JSON
を受け取ることも多々あるわけです。
手作りのクラスもいいですが、私はめんどくさがりなので、サンプルの JSON があったら
そこから自動でクラスを生成してくれる、そんな方法を探してみました。
また、ブラウザに貼り付けて生成するようなやり方ではなく、全てローカル内で完結します。
Windows でやろうとすると面倒かもしれないです・・・。
私の環境は debian8 です。
各OSで適宜読み替えてください。

Class を生成したい sample.json を手に入れる

今回使用するサンプルは以下にしました。
http://json.org/example.html
cat sample.json
code だと空白が無視されて見づらいので、JSON は画像にしてあります。
Screen Shot 2015-11-26 at 12.18.27 AM.png

見やすいようにフォーマットを適用する

cat sample.json | python -m json.tool > sample_formatted.json
リダイレクトする前のフォーマットされた JSON は以下です。
Screen Shot 2015-11-26 at 12.21.47 AM.png
いつもフォーマットを適用していると見慣れてくるので安心です?

sample.json から sample.schema を生成する

json-schema-generatorを利用します。
rubyの実行環境が必要になります。

generate-json-schema
gem install json-schema-generator
json-schema-generator sample.json > sample.schema

少し長いですが、以下のような json schema が出力されます。
リダイレクトして sample.schema として保存します。
Screen Shot 2016-02-27 at 10.58.12 PM.png

sample.schema から Java Class を生成する

jsonschema2pojoを利用します。
以下から最新の jar ファイルをダウンロードします。
https://github.com/joelittlejohn/jsonschema2pojo/releases
ダウンロードしたら、適当なディレクトリに解凍します。
Java Class を生成してみます。

generate-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 を利用にあたって必要になるライブラリです。
バージョンは利用する際に最新にした方がいいですね。

jackson-libraries
    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'
19
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
23