JavaのJSON-lib APIを使ってMapをJSONObjectに変換する方法
JSONObjectは「名前/値」のペアからなる順序を持たないコレクションです。一方、Mapはキーを値に対応付けるオブジェクトであり、重複したキーを保持できず、各キーが対応できる値は最大1つまでという特徴があります。
MapをJSON形式でシリアライズおよびデシリアライズするには、JSON-libライブラリを利用します。基本的な流れとしては、まずPOJOクラスを作成し、そのインスタンスをMapクラスのput()メソッドの引数として渡します。その後、このMapインスタンスをJSONObjectのaccumulateAll()メソッドに渡すことで、Mapの内容をJSONオブジェクトへ変換できます。
構文
public void accumulateAll(Map map)
accumulateAll()メソッドは、指定されたMap内のすべてのキーと値を現在のJSONObjectに取り込みます。キーがすでに存在する場合は、値が配列として蓄積される点にも注意してください。
サンプルコード
以下の例では、Employeeクラス(POJO)のインスタンスをHashMapに格納し、それをJSONObjectに変換しています。
import java.util.*;
import net.sf.json.JSONObject;
public class ConvertMapToJSONObjectTest {
public static void main(String[] args) throws Exception {
JSONObject jsonObject = new JSONObject();
Map<Integer, Employee> employees = new HashMap<Integer, Employee>();
employees.put(1, new Employee("Adithya", "Jai", 30));
employees.put(2, new Employee("Vamsi", "Krishna", 28));
employees.put(3, new Employee("Chaitanya", "Sai", 30));
jsonObject.accumulateAll(employees);
System.out.println(jsonObject.toString(3)); // インデント付きで整形出力
}
public static class Employee {
private String firstName, lastName;
private int age;
public Employee(String firstName, String lastName, int age) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
}
}
ポイント解説
- toString(3):引数にインデント幅を指定すると、読みやすい形式(pretty print)でJSONが出力されます。
- Mapのキー:数値型のキーでも、JSONでは文字列("1"、"2"など)として扱われます。
- 依存関係:JSON-libを使用するには、
json-lib本体に加えてcommons-beanutils、commons-collections、commons-lang、ezmorphなどの依存ライブラリが必要です。
実行結果
{
"1": {
"firstName": "Adithya",
"lastName": "Jai",
"age": 30
},
"2": {
"firstName": "Vamsi",
"lastName": "Krishna",
"age": 28
},
"3": {
"firstName": "Chaitanya",
"lastName": "Sai",
"age": 30
}
}
このように、accumulateAll()メソッドを使えば、Mapに格納されたPOJOのデータを簡単にJSONオブジェクトへ変換できます。なお、現在ではより活発にメンテナンスされているJacksonやGsonなどのライブラリも選択肢として検討するとよいでしょう。
-
JavaオブジェクトをJSONに変換する方法(Jackson・Gsonの使い方)
このチュートリアルでは、JavaオブジェクトをJSON形式に変換する方法を、定番ライブラリであるJacksonとGsonの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;
-
JavaのMapをJSONに変換する3つの方法(Jackson・Gson・org.json)
JavaのMap(マップ)をJSONに変換する方法はいくつかあります。Javaでは、配列やMapとJSONの相互変換を行う場面が非常に多く、Web APIとのデータ連携などでも欠かせない処理です。 この記事では、代表的なライブラリであるJackson、Gson、org.jsonを使用して、JavaのMapをJSONに変換する3つの具体例をサンプルコード付きで解説します。 Jacksonを使ってJavaのMapをJSONに変換する 最初の例では、Jackson Core と Jackson Databind を使ってJavaのMapをJSONに変換します。 Jacksonライブラリを使用するには