#1. 概要
##(1)Jacksonとは
- Java用のJSONパーサーライブラリの1つ
- JavaオブジェクトとJSONの相互変換ができる
要約すると、
・JSONをJavaオブジェクトに変換できる
・JavaオブジェクトをJSONに変換できる
##(2)JSONとは
###①JSON概要
- 「JavaScript Object Notation」の略
- テキストフォーマットの一種
- シンプルで軽量
- null,真偽値,数値,文字列,配列,オブジェクト(連想配列)のデータを、文字列で表現できる
- 配列とオブジェクト(連想配列)は、ネスト(入れ子)構造で表現する事ができる
- null と記述すると、null 値を表現できる
- データは keyとvalue のペア
- データはカンマで区切られる
- 波括弧{}の中はオブジェクト
- 角括弧[]の中は配列
###②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);
}
}
"Nobunaga"
#4. Javaオブジェクト ⇒ JSON文字列
##(1)書式
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)凡例
public class Info {
public String name;
public String email;
}
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);
}
}
{"name":"Nobunaga","email":"nobunaga@gmail.com"}
#5. もっと便利に、使いまわせるようにする
以下のクラスを作成します。
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文字列を生成します。