【Java】JSON ~JSONライブラリ:GSONを用いた場合~

■ 設定手順

 [1] GSONのライブラリを、以下のサイトからダウンロード
http://code.google.com/p/google-gson/
 [2] ダウンロードしたファイル「google-gson-X.X.X-release.zip」を解凍する
  (X.X.X : Version。今回は、「2.2.4」を用いた)

 [3] 解凍したフォルダ内部にある以下のJarをインポートする
    * gson-X.X.X.jar
    * gson-X.X.X-javadoc.jar
    * gson-X.X.X-sources.jar

 (例えば、Eclipseの場合、プロジェクトを右クリックし、
  [Propaties]-[Java Build Paht]-[Libraries]-[Add External JARs]で
  上記3つのJARファイルを追加する)

■ 使用上の注意

 * List をJSON化する際に、匿名内部クラスを利用すると、null になってしまうので注意
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
List<Person> people new ArrayList<Person>() {
    {
        add(person1);
        add(person2);
    }
};

String result = gson.toJson(people); // ★ result = null になってしまう ★
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
匿名内部クラス / 無名内部クラス については、以下の関連記事を参照のこと
https://blogs.yahoo.co.jp/dk521123/37174760.html

■ サンプル

Person.java

* ただのサンプル・オブジェクト
import java.util.List;

public class Person {
    private String name;
    private int age;
    private List<String> skills;
    
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return this.age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public List<String> getSkills() {
        return this.skills;
    }
    public void setSkills(List<String> skills) {
        this.skills = skills;
    }   
}

SampleJsonWithGson.java

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;

import com.google.gson.Gson;

public class SampleJsonWithGson {
   public static void main(String args[]) throws Exception {
      // データ設定
      Person person = new Person();
      person.setName("Mike");
      person.setAge(28);
      ArrayList<String> skills = new ArrayList<String>();
      skills.add("C");
      skills.add("C#");
      skills.add("Java");
      person.setSkills(skills);

      // ★本題★
      Gson gson = new Gson();

      // クラスをJSON(文字列)に変換
      String jsonText = gson.toJson(person);
      System.out.println("JSONに変換(toJson)" + jsonText);
      
      // ファイル出力
      File file = new File("output.json");
      PrintWriter printWriter = new PrintWriter(
         new BufferedWriter(new FileWriter(file)));
      printWriter.println(jsonText);
      printWriter.close();
      
      // ファイルからインスタンスを抽出
      FileReader reader = new FileReader("output.json");
      Person personFromFile = gson.fromJson(reader, Person.class);
      reader.close();
      
      System.out.println("Name : " + personFromFile.getName());
      System.out.println("Age : " + personFromFile.getAge());
      for (String skill : personFromFile.getSkills()) {
         System.out.println("Skill : " + skill);
      }
   }
}

出力例

JSONに変換(toJson){"name":"Mike","age":28,"skills":["C","C#","Java"]}
Name : Mike
Age : 28
Skill : C
Skill : C#
Skill : Java