目次
JSONとは?
JSONとは、JavaScript Object Notationの略で、JavaScriptのオブジェクトの表記法をベースしたデータ記述言語です。
JSONは、自由な構造でデータを持たせることができ、XMLのような開始・終了タグを必要としないため、XMLに比べデータ容量が軽量なのが特徴です。
JavaScriptのオブジェクト表記そのものなので、非同期でJavaScriptと通信を行うWEB APIのデータ形式として、よく採用されています。
JavaでJSONを扱うときはライブラリが便利
JavaでもJSONを扱うことができ、後述するJacksonなどのライブラリを用いることで、少ないコードで簡単にJSONデータを操作できます。
以降の内容で、Jacksonを使ってJavaのクラスをJSONに変換する方法を詳しく紹介します。
JSON構文を少しおさらい

Javaのサンプルコードを紹介する前に、JSONを知らない方のために、JSONの構文を少し紹介します。
すでにJSONの構文を知っている方は、この章は読み飛ばしましょう。
JSONの文法
中括弧 { … } の中に、「”キー名” : “値”」の形式で記述します。
{ "name": "Yamada" }
JSONで扱えるデータ型
JSONで扱えるデータ型は、文字列、数値、真偽、配列、オブジェクトで、各データは次のように記述します。
{
"name": "Yamada", //文字列
"age": 20, //数値
"delete_fjg": false, //真偽
"favorite_food": "apple", "melon", //配列
"address": { "postal_code": "1234567", "city": "Tokyo" } //オブジェクト
}
オブジェクトを入れ子にできる
JSONは、オブジェクトを入れ子にできます。以下が、オブジェクトを入れ子にした例で、”location”に、緯度・経度を持つオブジェクトを入れ子にしています。
{
"name": "Yamada",
"age": 20,
"location": {
"lat": 35.681236,
"lon": 139.767125
}
}

あまりオブジェクトを入れ子にしすぎると、JSONパーサーの解析時間が遅くなったり、場合によっては、入れ子の数の上限によりエラーになることがあります。
オブジェクトの入れ子の数(階層のレベル)は、可読性も考えて、多くても5つ程度にしておくのが良いでしょう。
Jacksonを使ってJavaクラスとJSONの変換
Jackson(ジャクソン)と読みます。
JacksonはJavaでJSONを扱うメジャーなライブラリです。単純なコードでJavaクラス→JSON、JSON→Javaクラスに変換でき、多くの開発プロジェクトで採用されています。
Jacksonをライブラリに追加する
JacksonはJavaの標準APIではなく、外部ライブラリの為、利用するにはライブラリをダウンロードする必要があります。2019年10月時点では、バージョン2.10が最新です。
■ Mavenの場合
Mavenを利用する場合はpom.xmlに以下の依存関係を追加します。
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.0</version>
</dependency>
■ Gradleの場合
Gradleを利用する場合は、build.gradleに以下の依存関係を追加します。
dependencies {
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.10.0'
// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.10.0'
}
■ 直接jarファイルをダウンロードする場合
以下の3つのjarファイルをダウンロードして、Javaのプロジェクトに追加します。
jackson-core-x.x.x.jar
http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/
jackson-databind-x.x.x.jar
http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/
jackson-annotations-x.x.x.jar
http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/
JavaオブジェクトをJSONに変換する
ライブラリを追加したら、さっそく使ってみましょう。まず、JavaオブジェクトをJSONに変換する方法を解説します。
最初に、JSONに変換するJavaのクラスを作成します。
//ユーザクラス
public class User {
private String id; // ID
private String name; // ユーザ名
private int age; // 年齢
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
クラスをJSON文字列に変換する、サンプルコードは以下のようになります。変換にはObjectMapperクラスのwriteValueAsStringメソッドを使用します。
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Sample {
public static void main(String[] args) {
//ユーザクラスのインスタンスを作成
User user = new User();
user.setId("ID1234");
user.setName("Yamada Tarou");
user.setAge(30);
// JSON変換用のクラス
ObjectMapper mapper = new ObjectMapper();
try {
//JSON文字列に変換
String json = mapper.writeValueAsString(user);
System.out.println(json);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
上のコードを実行すると、コンソールにUserクラスをJSON文字列に変換したものが出力されます。
▪️ 実行結果
{"id":"ID1234","name":"Yamada Tarou","age":30}
JSON文字列からJavaのオブジェクトに変換する
続いて、JSON文字列 → Javaオブジェクトへ変換する方法を解説します。以下のJSON文字列を、先ほど作成したUserクラスに変換します。
{"id":"ID_9999","name":"山田 花子","age":20}
public static void main(String[] args) {
//JSON変換用のクラス
ObjectMapper mapper = new ObjectMapper();
//Userクラスに変換するJSON文字列
String json = "{\"id\":\"ID_9999\",\"name\":\"山田 花子\",\"age\":20}";
try {
User user = mapper.readValue(json, User.class);
System.out.println("id=" + user.getId());
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
▪️ 実行結果
id=ID_9999
name=山田 花子
age=20
Jackson以外のJSONライブラリ
Jackson以外にも、Javaで使えるJSONライブラリには、次のものがあります。GsonはGoogleが開発したJSONライブラリで、Androidアプリの開発でよく用いられています。
- Gson (https://github.com/google/gson)
- JSON in Java (http://stleary.github.io/JSON-java/)
- JSON-P (JSON Processing、JSR 353の実装、https://javaee.github.io/jsonp/)
Java標準のAPIでもJSONを扱うことはできますが、ライブラリを使う方が便利です。