Java - JSONライブラリを使用する方法(JSONObject、JSONArray)

Javaで org.jsonライブラリを使用してJSONデータを扱うことができます。

このライブラリで提供されるJSONObject、JSONArrayクラスはJSONデータを持っており、JSON形式の文字列で出力することができます。また、JSON文字列をファイルに保存することもできます。

この記事では、JSONライブラリを使用する方法を紹介します。

  • JSONObjectオブジェクト生
  • HashMapにJSONObject生
  • JSON文字列でJSONObjectオブジェクト生
  • POJOでJSONObjectオブジェクト生
  • JSONArrayオブジェクト生
  • ListにJSONArrayオブジェクト生
  • JavaでJSONをファイルに保存

1. JSON ?

JSONはJavaScript Object Notationの略で、Javascriptでデータを転送するために作成されました。

JSONファイルは、次のようにkey-valueの形式でデータを持っています。

{
   "pageInfo": {
         "pageName": "abc",
         "pagePic": "http://example.com/content.jpg"
    },
    "posts": [
         {
              "post_id": "123456789012_123456789012",
              "message": "Sounds cool. Can't wait to see it!",
              "likesCount": "2",
         }
    ]
}

2. JSONライブラリの依存関係

org.jsonは、JavaのJSONライブラリです。 gradleプロジェクトでは、次のように build.gradleに依存性を追加することができます。

dependencies {
    ...
    implementation group: 'org.json', name: 'json', version: '20090211'
}

3. JSONObject

JSONObjectはJSONからkey-valueのペアでデータを表現するオブジェクトです。

JSONObjectにデータを入力するときは、 put(key, value)で入力します。 toString()はJSONObjectが持っているデータをJSON形式で出力します。

import org.json.JSONException;
import org.json.JSONObject;

public class JsonExample {

    public static void main(String[] args) throws JSONException {

        JSONObject jo = new JSONObject();
        jo.put("name", "Jone");
        jo.put("city", "Seoul");

        System.out.println(jo.toString());
    }
}

Output:

{"city":"Seoul","name":"Jone"}

4. HashMapでJSONObjectを作成する

HashMapに格納されたデータをJSONに変換することができます。

次のようにHashMapオブジェクトをJSONObjectコンストラクタの引数として渡します。

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class JsonExample2 {

    public static void main(String[] args) throws JSONException {

        Map<String, String> map = new HashMap<>();
        map.put("name", "Jone");
        map.put("city", "Seoul");

        JSONObject jo = new JSONObject(map);

        System.out.println(jo.toString());
    }
}

Output:

{"city":"Seoul","name":"Jone"}

5. JSON文字列でJSONObjectオブジェクトを作成する

JSON文字列でJSONObjectオブジェクトを生成することができます。このように生成されたJSONObjectにデータを追加することもできます。

import org.json.JSONException;
import org.json.JSONObject;

import java.util.Iterator;

public class JsonExample3 {

    public static void main(String[] args) throws JSONException {

        JSONObject jo = new JSONObject("{\"city\":\"Seoul\",\"name\":\"Jone\"}");

        Iterator it = jo.keys();
        while (it.hasNext()) {
            String key = (String) it.next();
            System.out.println("key: " + key + ", value: " + jo.getString(key));
        }
        System.out.println(jo.toString());

        jo.put("age", "30");
        System.out.println(jo.toString());
    }
}

Output:

{"city":"Seoul","name":"Jone"}
{"city":"Seoul","name":"Jone","age":"30"}

6. POJOによるJSONObjectオブジェクトの作成

POJO(Plain Old Java Object)は以下の例の Customerクラスのように、単にget、setメソッドだけなJavaクラスを意味します。 JSONObjectは、POJOオブジェクトを引数として受け、ここでkeyとvalueを抽出してJSONデータに追加します。

import org.json.JSONException;
import org.json.JSONObject;

public class JsonExample4 {

    public static class Customer {
        private String name;
        private String city;

        Customer(String name, String city) {
            this.name = name;
            this.city = city;
        }
        public void setName(String name) {
            this.name = name;
        }
        public void setCity(String city) {
            this.city = city;
        }
        public String getCity() {
            return city;
        }
        public String getName() {
            return name;
        }
    }


    public static void main(String[] args) throws JSONException {

        Customer customer = new Customer("Jone", "Seoul");

        JSONObject jo = new JSONObject(customer);

        System.out.println(jo.toString());
    }
}

Output:

{"city":"Seoul","name":"Jone"}

7. JSONArray

JSONは key-value形式でデータを持っているが、ここで、valueは以下のようにArray型になることがあります。

"friends":["Harry","Sam"]

次の例のようにJSONArrayに put(value)で0個以上のデータを配列に追加することができます。そしてJSONArrayはJSONObjectのvalueになるように再度追加することができます。

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class JsonExample5 {

    public static void main(String[] args) throws JSONException {

        JSONArray ja = new JSONArray();
        ja.put("Harry");
        ja.put("Sam");

        JSONObject jo = new JSONObject();
        jo.put("name", "Jone");
        jo.put("city", "Seoul");
        jo.put("friends", ja);

        System.out.println(jo.toString());
    }
}

Output:

{"city":"Seoul","name":"Jone","friends":["Harry","Sam"]}

8. ListによるJSONArrayオブジェクトの作成

JSONArrayコンストラクタは、引数としてListを受けて、ListのすべてのデータをJSONArrayに追加します。

以下は、上記のJSONArray例では、Listを用いてJSONArrayオブジェクトを生成するように変更しました。

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class JsonExample6 {

    public static void main(String[] args) throws JSONException {

        List<String> list = new ArrayList<>();
        list.add("Harry");
        list.add("Sam");

        JSONArray ja = new JSONArray(list);

        JSONObject jo = new JSONObject();
        jo.put("name", "Jone");
        jo.put("city", "Seoul");
        jo.put("friends", ja);

        System.out.println(jo.toString());
    }
}

Output:

{"city":"Seoul","name":"Jone","friends":["Harry","Sam"]}

9. JSONをファイルとして保存

JavaのJSONオブジェクトが持っているデータをJSON形式の文字列に変換し、ファイルに保存する例を示します。

import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class JsonExample7 {

    public static void main(String[] args) throws JSONException, IOException {

        JSONObject jo = new JSONObject();
        jo.put("name", "Jone");
        jo.put("city", "Seoul");

        String jsonStr = jo.toString();
        File jsonFile = new File("/var/tmp/example.json");

        writeStringToFile(jsonStr, jsonFile);
    }

    public static void writeStringToFile(String str, File file) throws IOException {
        BufferedWriter writer = new BufferedWriter(new FileWriter(file));
        writer.write(str);
        writer.close();
    }

}

Output:

/var/tmp$ cat example.json
{"city":"Seoul","name":"Jone"}

References

codechachaCopyright ©2019 codechacha