Java EE 7が出たとき、JSR 353(Java API for JSON Processing)でJSONの標準APIが出ると聞きました。以下のサイトをみると、Java SEからも使える…のかな(^^;?
http://java.dzone.com/articles/java-api-json-processing-jsr
というか、自分はそもそもJSON触るの実は初めて…ということで、ちょっとググってみた所、評判が良さそうだったJacksonなるライブラリを(まずは)触ってみました。あとでJSR 353で書き換えてみようかと。
Jackson High-performance JSON processor.
http://jackson.codehaus.org/
なお最新の2.0系は以下がメインのページのようです。
ネットの記事的には1.x系が多いこともあって、最初2.x系に気付かなかったです(^^;
というわけで、1.x系のページにある5分でできるチュートリアルを最初試していて…
http://wiki.fasterxml.com/JacksonInFiveMinutes
最終的には2.x系に書き換えました。
あと、タイトルにつけたwith Lombokは単にUserクラスをもう少し短くしただけ(^^;汗
ということでメモ。
【環境】
OS :Windows 7 Professional
IDE:NetBeans 7.3
JDK:JDK 7
NetBeansでファイルメニューの新規プロジェクトから
Maven -> Javaアプリケーションを選択します。
プロジェクト名などを適当に入れます。
でプロジェクトを作成。
pom.xmlに以下追加しました。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>0.11.8</version>
</dependency>
1.x系とはgroupIdが異なるので注意です。
Userクラス
サンプルに載っているコードは以下です。
public class User {
public enum Gender { MALE, FEMALE };
public static class Name {
private String _first, _last;
public String getFirst() { return _first; }
public String getLast() { return _last; }
public void setFirst(String s) { _first = s; }
public void setLast(String s) { _last = s; }
}
private Gender _gender;
private Name _name;
private boolean _isVerified;
private byte[] _userImage;
public Name getName() { return _name; }
public boolean isVerified() { return _isVerified; }
public Gender getGender() { return _gender; }
public byte[] getUserImage() { return _userImage; }
public void setName(Name n) { _name = n; }
public void setVerified(boolean b) { _isVerified = b; }
public void setGender(Gender g) { _gender = g; }
public void setUserImage(byte[] b) { _userImage = b; }
}
これをLombok使うと以下で書けます。@Data使うともっと短い気もしますが、とりあえずSetter/Getterだけで。
しょうもない書き換えですが(^^;
package jp.co.hoge.jacksonsample;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
public class User {
public enum Gender { MALE, FEMALE };
public static class Name {
@Getter @Setter
private String first, last;
}
@Getter @Setter
private Gender gender;
@Getter @Setter
private Name name;
@Getter @Setter
private boolean isVerified;
@Getter @Setter
private byte[] userImage;
}
あと変数名ちょっと変えてます(^^;
JSON形式のファイル
チュートリアルのサンプルベースに以下ファイルを追加。
NetBeansの以下メニューから作りました。
{
"name": { "first" : "Maki", "last" : "Horikita"},
"gender" : "FEMALE",
"verified" : false,
"userImage" : "Rm9vYmFyIQ=="
}
データバインドサンプル
で、以下コードを書いて実行します。
package jp.co.hoge.jacksonsample;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;
public class App
{
public static void main( String[] args ) throws IOException
{
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(new File("user.json"), User.class);
}
}
このコードに関しては1.x系と全く同じで、import文だけが違います。
で、userをウォッチしてみると
おおー、超簡単。なんだこれ(^^;
もう少し触ってみないと。
これだけ(^^