Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

JSONとは?

JSONとは、JavaScript Object Notationの略で、JavaScriptのオブジェクトの表記法をベースしたデータ記述言語です。

JSONは、自由な構造でデータを持たせることができ、XMLのような開始・終了タグを必要としないため、XMLに比べデータ容量が軽量なのが特徴です。

JavaScriptのオブジェクト表記そのものなので、非同期でJavaScriptと通信を行うWEB APIのデータ形式として、よく採用されています。

JavaでJSONを扱うときはライブラリが便利

JavaでもJSONを扱うことができ、後述するJacksonなどのライブラリを用いることで、少ないコードで簡単にJSONデータを操作できます。

以降の内容で、Jacksonを使ってJavaのクラスをJSONに変換する方法を詳しく紹介します。

ポテパンダの一言メモ

Java標準のAPIでも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アプリの開発でよく用いられています。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。