Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaオブジェクトをJSONに変換する方法(Jackson・Gsonの使い方)

このチュートリアルでは、JavaオブジェクトをJSON形式に変換する方法を、定番ライブラリであるJacksonGsonの2つを使って解説します。

サンプルとして使用するのは、ごく標準的なPOJO(Plain Old Java Object)であるPersonクラスです。Personオブジェクトを作成したら、それぞれのライブラリを使ってJSONへ変換してみましょう。

Person.java

import java.util.List;
import java.util.Map;

public class Person {

    String name;
    Integer age;
    List<String> hobbies;
    Map<String, String> languages;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public List<String> getHobbies() {
        return hobbies;
    }

    public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
    }

    public Map<String, String> getLanguages() {
        return languages;
    }

    public void setLanguages(Map<String, String> languages) {
        this.languages = languages;
    }
}

Jacksonを使ってJavaオブジェクトをJSONに変換する

JacksonライブラリのObjectMapperクラスを使うと、Javaオブジェクトを簡単にJSONへ変換できます。

ObjectMapperクラスには、JSONをファイルに書き出すメソッドや、JSONを文字列(String)として出力するメソッドなど、用途に応じたさまざまなメソッドが用意されています。

次の例では、ファイルへの書き出しと、pretty print機能による整形済みJSONの表示を両方行っています。

まずは、MavenでJacksonライブラリを取得し、pom.xmlに依存関係として追加します。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.10.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.2</version>
</dependency>

ConvertJavaObjectToJson.java

import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ConvertJavaObjectToJson {

    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        Person person = newPerson();

        try {
            mapper.writeValue(new File("person.json"), person);
            String jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(person);
            System.out.println(jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static Person newPerson() {
        Person person = new Person();

        List<String> hobbies = new ArrayList<>();
        hobbies.add("Football");
        hobbies.add("Cooking");
        hobbies.add("Swimming");

        Map<String, String> languages = new HashMap<>();
        languages.put("French", "Beginner");
        languages.put("German", "Intermediate");
        languages.put("Spanish", "Advanced");

        person.setName("David");
        person.setAge(30);
        person.setHobbies(hobbies);
        person.setLanguages(languages);

        return person;
    }
}

実行結果:

{
  "name" : "David",
  "age" : 30,
  "hobbies" : [ "Football", "Cooking", "Swimming" ],
  "languages" : {
    "French" : "Beginner",
    "German" : "Intermediate",
    "Spanish" : "Advanced"
  }
}

同時に、プロジェクトのワークスペース内にperson.jsonファイルも生成されます。

関連記事

  • JavaでJSONをパースする方法
  • JavaのMapをJSONに変換する方法
  • JSONのエンコードとデコードの方法

Gsonを使ってJavaオブジェクトをJSONに変換する

まず、pom.xmlにGsonの依存関係を追加します。

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

続いて、以下のコードでJavaオブジェクトをJSON文字列に変換します。

import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ConvertJavaObjectToJson {

    public static void main(String[] args) {
        Gson gson = new Gson();
        Person person = newPerson();
        String jsonString = gson.toJson(person);
        System.out.println(jsonString);
    }

    private static Person newPerson() {
        Person person = new Person();

        List<String> hobbies = new ArrayList<>();
        hobbies.add("Football");
        hobbies.add("Cooking");
        hobbies.add("Swimming");

        Map<String, String> languages = new HashMap<>();
        languages.put("French", "Beginner");
        languages.put("German", "Intermediate");
        languages.put("Spanish", "Advanced");

        person.setName("David");
        person.setAge(30);
        person.setHobbies(hobbies);
        person.setLanguages(languages);

        return person;
    }
}

実行結果:

{"name":"David","age":30,"hobbies":["Football","Cooking","Swimming"],"languages":{"French":"Beginner","German":"Intermediate","Spanish":"Advanced"}}

GsonのtoJson()メソッドは、デフォルトでは空白や改行を含まないコンパクトなJSONを出力します。整形して表示したい場合は、GsonBuildersetPrettyPrinting()を利用してください。

まとめ

本記事では、JacksonとGsonという2つの人気ライブラリを使った、JavaオブジェクトからJSONへの変換方法を紹介しました。

  • Jackson:ObjectMapperクラスを中心とした高機能なライブラリ。ファイル入出力やpretty printなど豊富な機能を備え、Spring Bootでも標準的に採用されています。
  • Gson:Google製の軽量ライブラリ。new Gson().toJson(obj)だけで変換できる手軽さが魅力で、シンプルな用途に最適です。

どちらのライブラリも基本的な変換は数行で実現できます。プロジェクトの要件や既存の依存関係に合わせて、最適な方を選びましょう。

  1. JSONテキストをJavaScriptのJSONオブジェクトに変換する方法を解説

    JavaScriptでは、JSON.parse()メソッドを使用することで、JSON形式のテキスト文字列をJavaScriptオブジェクトへと変換できます。このメソッドは、APIから取得したデータやサーバーとの通信で受け取ったJSON文字列を、プログラム内で扱いやすいオブジェクトにパースする際に非常に重要な役割を果たします。 以下は、JSONテキストをJavaScriptオブジェクトに変換する具体的なコード例です。 サンプルコード <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /&

  2. JavaでJSONをパース(解析)する方法|org.json・Gson・JsonPathの使い方を解説

    このチュートリアルでは、JavaでJSONを解析(パース)する方法を、複数のライブラリの使い方とあわせて解説します。 JSONとは「JavaScript Object Notation」の略称で、JavaScriptのサブセットをベースとした軽量なデータ形式です。 データ交換フォーマットとして広く普及しており、Webプログラミングにおいて不可欠な技術となっています。本記事では、org.jsonライブラリを使ったJSONのパース方法を中心に紹介します。 まず基本をおさらいしましょう。JSONオブジェクトは「キーと値のペア」から構成される順序のない集合です。一方、JSON配列は値が順序付けて格納さ