JavaのJacksonでJSONとJavaオブジェクトを変換するサンプルです。
| 確認環境 ・JDK 10/8 ・Eclipse 4.8 |
目次
Jackson
- JSONを処理するライブラリです。
- JSONからJavaオブジェクトに変換します。
- JavaオブジェクトからJSONに変換します。
- 以下は、Jackson Projectのリンクです。
https://github.com/FasterXML/jackson
https://github.com/FasterXML/jackson-databind
https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations
https://github.com/FasterXML/jackson-core
Jacksonのライブラリを取得する
Maven
pom.xmlに2~7行目を追加します。1,8行目がない場合は1,8行目も追加します。
<dependencies>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.7</version>
</dependency>
</dependencies>
https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.9.7
上記コードの追加で、jackson-databindの他にjackson-annotationsとjackson-coreも追加されます。

jarファイル
jarファイルもMavenRepositoryのサイトにあります。
https://mvnrepository.com/artifact/com.fasterxml.jackson.core
上記リンクの「Group: FasterXML Jackson Core」のページから、 jackson-databindをクリック→2.9.7をクリックして、以下の図の「Files」の横にあるbundleをクリックするとjarファイルをダウンロードできます。

jarファイルをクラスパスに追加します。
Eclipse 外部jarファイルをクラスパス(ビルドパス)に設定する方法
JSONからJavaオブジェクトに変換する
JSONからJavaオブジェクトに変換するサンプルです。
package test1;
import java.io.IOException;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
class Syain {
private int id;
//@JsonPropertyは、JSONのnameと紐付けする
@JsonProperty("name")
private String n;
private List<String> sikaku; // 資格
public int getId() {
return id;
}
public String getN() {
return n;
}
public List<String> getSikaku() {
return sikaku;
}
}
public class Test1 {
public static void main(String[] args) {
//JSONのデータ1
String testJson1 =
"{\"id\":1, \"name\":\"taro\",\"sikaku\":[\"基本\",\"応用\"]}";
//JSONのデータ2
String testJson2 = "{\"id\":2, \"name\":\"jiro\"}";
//Javaオブジェクトの生成
Syain syain1 = new Syain();
Syain syain2 = new Syain();
ObjectMapper mapper = new ObjectMapper();
try {
//JSONからJavaオブジェクトに変換
syain1 = mapper.readValue(testJson1, Syain.class);
syain2 = mapper.readValue(testJson2, Syain.class);
//Javaオブジェクトのデータの確認
System.out.println(syain1.getId()); // 1
System.out.println(syain1.getN()); // taro
System.out.println(syain1.getSikaku()); // [基本, 応用]
System.out.println(syain2.getId()); // 2
System.out.println(syain2.getN()); // jiro
System.out.println(syain2.getSikaku()); // null
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
13行目の@JsonPropertyは、JSONの名前と紐付けします。@JsonPropertyがない場合、JSONと紐付けできないのでエラーになります。
16行目は、リストです。
45,46行目は、JSONからJavaオブジェクトに変換しています。
JavaオブジェクトからJSONに変換する
JavaオブジェクトからJSONに変換するサンプルです。
package test1;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
class Syain {
@JsonProperty("id")
private int id;
//@JsonPropertyの値がJSONの項目になる
//(nではなくnameになる)
@JsonProperty("name")
private String n;
@JsonProperty("sikaku")
private List<String> sikaku; // 資格
public void setId(int id) {
this.id = id;
}
public void setN(String n) {
this.n = n;
}
public void setSikaku(List<String> sikaku) {
this.sikaku = sikaku;
}
}
public class Test1 {
public static void main(String[] args) {
//Javaオブジェクトの生成
Syain syain1 = new Syain();
Syain syain2 = new Syain();
//Javaオブジェクトに値をセット
List<String> sikaku = new ArrayList<>();
sikaku.add("基本");
sikaku.add("応用");
syain1.setId(1);
syain1.setN("taro");
syain1.setSikaku(sikaku);
syain2.setId(2);
syain2.setN("jiro");
ObjectMapper mapper = new ObjectMapper();
try {
//JavaオブジェクトからJSONに変換
String testJson1 = mapper.writeValueAsString(syain1);
String testJson2 = mapper.writeValueAsString(syain2);
//JSONの確認
System.out.println(testJson1);
//{"id":1,"name":"taro","sikaku":["基本","応用"]}
System.out.println(testJson2);
//{"id":2,"name":"jiro","sikaku":null}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
9,14,17行目の@JsonPropertyは、JSONの項目になります。
18行目は、リストです。
53,54行目は、JavaオブジェクトからJSONに変換しています。
関連の記事
JavaScript JSONをJavaScriptオブジェクトにする(parse)
JavaScript JavaScriptオブジェクトをJSONにする(stringify)