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
Related Posts
- Java - AtomicReference使用方法
- Java - CountDownLatchを使用する方法、および例
- Java - ScheduledThreadPoolExecutor使用方法
- Java - SummaryStatisticsの使用方法(count、min、max、average)
- Java8 - 関数型インタフェース (Functional Interface) について
- Java - String配列をint配列に変換する
- Java - ArrayList要素の値を変更する方法、replaceAll()
- Java - 2つのリストが同じかどうかを比較
- Java - 配列から特定のIndex要素を削除する3つの方法
- Java - HashMapソート、4つの方法
- Java - 文字列を配列に変換する方法
- Java - ArrayListが空であることを確認する3つの方法
- Java - ArrayListの巡回、4つの方法
- Java - ArrayListの最大値、最小 値を見つける
- Java - ArrayListの合計、平均値の計算
- Java - HashMap巡回、3つの方法
- Java - do whileとwhileの違い
- Java - Lambda式と関数型インタフェース
- Java - List empty(null)チェック、3つの方法
- Java - ArrayListの初期化、4つの方法
- Java - Stream.reduce()の使い方と例
- Java - 2つのマップを結合する(merge、putAll)
- Java - java.util.Dateをjava.sql.Dateに変換する
- Java - ArrayListをStringに変換する
- Java - ClassNotFoundExceptionの発生原因と解決策
- Java - 非静的メソッドは静的コンテキストから参照できません
- Java - NoSuchMethodErrorの原因と解決策
- Java - JSONライブラリを使用する方法(JSONObject、JSONArray)
- Java - byte[]配列をFileに保存
- Java - byte[]の配列をStringに変換
- Java - ファイルのアクセス権を確認し、変更
- Java - 一時フォルダ(Temp directory)パスを取得する
- Javaでシェルスクリプトを実行
- Java - Streamを配列に変換する
- Java - リスト重複排除、2つの方法