131
156

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Jacksonの便利な使い方 [初心者向け]

Posted at

#1. 概要
##(1)Jacksonとは

  • Java用のJSONパーサーライブラリの1つ
  • JavaオブジェクトとJSONの相互変換ができる

要約すると、
・JSONをJavaオブジェクトに変換できる
・JavaオブジェクトをJSONに変換できる

##(2)JSONとは
###①JSON概要

  1. 「JavaScript Object Notation」の略
  2. テキストフォーマットの一種
  3. シンプルで軽量
  4. null,真偽値,数値,文字列,配列,オブジェクト(連想配列)のデータを、文字列で表現できる
  5. 配列とオブジェクト(連想配列)は、ネスト(入れ子)構造で表現する事ができる
  6. null と記述すると、null 値を表現できる
  7. データは keyとvalue のペア
  8. データはカンマで区切られる
  9. 波括弧{}の中はオブジェクト
  10. 角括弧[]の中は配列

###②JSONサンプル

{ "firstName":"Nobunaga" , "lastName":"Oda" }
  • "firstName"と"lastName"がKey
  • "Nobunaga"と"Oda"がvalue
  • valueが文字列なので""で囲っている

###③JSONのメリット

  • XMLの代わりにJSONを利用することで冗長なXMLと比べて通信時のデータ量を削減できるなどのメリットがあります。
  • JavaScriptに限らず言語をこえたデータ交換のためのデータフォーマットとしてJSONを利用することができる。

##(3)Jacksonで登場人物

###①JSON文字列

{"nobunaga":1534,"hideyoshi":1537,"ieyasu":1543}

###②Javaオブジェクト

public class Eiketsu {
   public int nobunaga;
   public int hideyoshi;
   public int ieyasu;
}

##(4)何故Jacksonを使うのか
例えば、Jacksonを考慮せず(使わず)JSON文字列をJavaオブジェクトに変換しようとすると、Javaの文字列をsubstringなどを使用して分解して各々のフィールドに格納するなどの作業が必要になる。
文字列編集などの大変な作業をJacksonが簡単に変換作業を行ってくれるために非常に便利。

#2. 使用方法
##(1)ダウンロード
Jacksonで必要とされるJARファイルは、その用途によって複数に分割されていますが、ここでは何も考えず、以下の3つをダウンロードします。
以下から①Streaming API、②Databind、③Annotations をダウンロード
http://wiki.fasterxml.com/JacksonDownload

###①jackson-core
jackson-core-2.3.5.jar
データを順に読み込みながら処理するため、最もパフォーマンスの良い方法
###②jackson-databind
jackson-databind-2.3.4.jar
JSONデータをJavaのデータ型と相互に変換できます
###③jackson-annotations
jackson-annotations-2.3.0.jar

##(2)ライブラリーに追加
ダウンロードした3種のjarファイルをライブラリに追加して使えるようにします。
ここではEclipseで使用する前提です。

①Eclipse上でjacksonを使用したいプロジェクト内のlibフォルダ内に追加(配置)する。
②追加した3種のjarファイルを選択して、右クリックから「ビルド・パス」を選択し「ビルド・パスに追加」を選択する

以上でjacksonライブラリーを使用できるようになります。

#3. JSON文字列 ⇒ Javaオブジェクト
##(1)書式

実行クラス
public class Main {

     public static void main(String[] args) throws IOException {
          String json = "JSON文字列が入る";

          ObjectMapper mapper = new ObjectMapper();
          DTOクラス DTOインスタンス = mapper.readValue(json, DTOクラス.class);

          System.out.println(DTOインスタンス.メンバ名);
     }
}

##(2)凡例

public class Main {

     public static void main(String[] args) throws IOException {
          String json = "{\"name\":\"Nobunaga\", \"email\":\"nobunaga@gmail.com\"}";

          ObjectMapper mapper = new ObjectMapper();
          Info info  = mapper.readValue(json, Info.class);

          System.out.println(info.name);
     }
}
console
"Nobunaga"

#4. Javaオブジェクト ⇒ JSON文字列
##(1)書式

DTOクラス
public class DTOクラス {
	public String メンバ名1;
	public String メンバ名2;
}
実行クラス
public class Main {

    public static void main(String[] args) throws JsonProcessingException {
        DTOクラス DTOインスタンス = new DTOクラス();
        DTOインスタンス.メンバ名1 = ;
        DTOインスタンス.メンバ名2 = ;

        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(DTOインスタンス);

        System.out.println(json);
    }
}

##(2)凡例

Info.java
public class Info {
	public String name;
	public String email;
}
Main.java
public class Main {

    public static void main(String[] args) throws JsonProcessingException {
        Info info = new Info();
        info.name = "Nobunaga";
        info.email = "nobunaga@gmail.com";

        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(info);

        System.out.println(json);
    }
}
console
{"name":"Nobunaga","email":"nobunaga@gmail.com"}

#5. もっと便利に、使いまわせるようにする
以下のクラスを作成します。

JsonUtil.java
package com.fasterxml.jackson.core.jackson_core;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonUtil {
     /**
     * JSON文字列をDTOクラスへ変換する
     * @param dto
     * @param json
     * @return DTOobject
     * @throws IOException
     */
     public static <T> T parse(Class<T> dto, String json){
          ObjectMapper mapper = new ObjectMapper();
          try{
               return (T) mapper.readValue(json, dto);
          }catch(IOException e){
               return null;
          }
     }
     /**
     * DTOクラスのインスタンスをJSON文字列に変換する
     * @param dto
     * @return String
     * @throws JsonProcessingException
     */
     public static String convert(Object dto){
          ObjectMapper mapper = new ObjectMapper();
          try{
               String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(dto);
               return json;
          }catch(JsonProcessingException e){
               return null;
          }
     }
}

##(1)parse()メソッド
このメソッドはJSONの文字列をJavaオブジェクトに変換しています。
引数の(Class dto, String json)ではJavaオブジェクトのクラスと
変換したいJSON文字列を渡します。
引数に渡すものはどんなJavaオブジェクトでもJSON文字列でもよいので、
parse(Javaオブジェクト,JSON文字列)とすればJSON文字列からJavaオブジェクトに変換されて、Javaオブジェクトが返ってきます。

##(1)convert()メソッド
このメソッドは引数にJavaオブジェクトを渡すだけでJavaオブジェクトからJSON文字列を生成します。

131
156
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
131
156

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?