読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

JacksonのJSON Data Bindingサンプルを書いてみた with Lombok

Lombok Jackson JSON Java

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
JDKJDK 7

Mavenプロジェクト作成

NetBeansでファイルメニューの新規プロジェクトから

Maven -> Javaアプリケーションを選択します。
f:id:kikutaro777:20130715234501j:plain

プロジェクト名などを適当に入れます。
f:id:kikutaro777:20130715234511j:plain

でプロジェクトを作成。

pom.xml

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の以下メニューから作りました。

f:id:kikutaro777:20130715234603j:plain

{
    "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をウォッチしてみると

f:id:kikutaro777:20130715234615j:plain

おおー、超簡単。なんだこれ(^^;
もう少し触ってみないと。

これだけ(^^

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村