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

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-beanutilscommons-collectionscommons-langezmorph などの依存ライブラリが必要です。

実行結果

{
 "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などのライブラリも選択肢として検討するとよいでしょう。

  1. 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;

  2. 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ライブラリを使用するには