自己投資としてチャレンジしている内容を Blog で公開しています。今回は JSON ファイルの作成(書き込み)と読み込み方法について紹介します。
————————————
▼1. JSON ファイルのデータを読み書きする方法
————————————
JSON.simple を利用した JSON ファイルの作成と、JSON ファイルの読み込み方法についてまとめます。
JSON.simple は、JSONの処理、JSONデータの読み取りと書き込みがマシンのリソースを消費せず高速に実現できる JSON 生成ライブラリーです。 生成された JSON は JSON の仕様 RFC4627 に完全に準拠します。
————————————
▼2. 事前準備
————————————
pom.xml にて json-simple の maven 依存関係を追記します。
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>————————————
▼3. Json ファイルの作成と生成した JSON ファイルを読むコード
————————————
3-1. Json ファイルを作成するために、主に 2 つのオブジェクト JSONObject と JSONArray とを利用します。JSONObject は json オブジェクトを作成するために put() メソッドを利用しフィールドを生成します。JSONArray は json 配列となるデータを作成するために add() メソッドを利用し JSONObject type のオフジェクトを追加します。Json ファイルの読み取り結果を 3 通りの方法で出力しています。
(例)
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
public class ReadWriteJSONv6 {
protected static final Logger log = LoggerFactory.getLogger(ReadWriteJSONv6.class);
public static void main(String... args) throws InterruptedException {
// 1st record
JSONObject engineerInfo = new JSONObject();
engineerInfo.put("LastName", "Travase");
engineerInfo.put("isRegistered", true);
JSONObject personObject = new JSONObject();
personObject.put("id", "7");
personObject.put("person", engineerInfo);
// 2nd record
JSONObject engineerInfo2 = new JSONObject();
engineerInfo2.put("LastName", "Ken");
engineerInfo2.put("isRegistered", true);
JSONObject personObject2 = new JSONObject();
personObject2.put("id", "8");
personObject2.put("person", engineerInfo2);
// Add person to list
JSONArray pList = new JSONArray();
pList.add(personObject);
pList.add(personObject2);
log.info("Create JSON file");
try (FileWriter file = new FileWriter("/xxxx/test1.json")) {
file.write(pList.toJSONString());
file.flush();
} catch (IOException e) {
e.printStackTrace();
}
log.info("Read the json file");
JSONParser jsonParser = new JSONParser();
try (FileReader reader = new FileReader("/xxxx/test1.json")) {
Object obj = jsonParser.parse(reader);
JSONArray pListr = (JSONArray) obj;
log.info("==========================");
log.info("Print all data");
log.info("==========================");
System.out.println(pListr);
Thread.sleep(500);
log.info("==========================");
log.info("Print data 1 by 1");
log.info("==========================");
pListr.forEach(pers -> parsePersonObject((JSONObject) pers));
Thread.sleep(500);
log.info("==========================");
log.info("Print data per id");
log.info("==========================");
Iterator iter = pListr.iterator();
while (iter.hasNext()){
JSONObject json = (JSONObject) iter.next();
Iterator<String> keys = json.keySet().iterator();
while (keys.hasNext()){
String key = keys.next();
System.out.println("KEY; " + key + " value :" + json.get(key));
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
private static void parsePersonObject(JSONObject person1) {
JSONObject personObject = (JSONObject) person1.get("person");
String id = (String) person1.get("id");
System.out.println(id);
boolean isRegistered = (boolean) personObject.get("isRegistered");
System.out.println(isRegistered);
String lastName = (String) personObject.get("LastName");
System.out.println(lastName);
}
}
3-2. 実行結果 (一部) は以下となります。
[main] INFO ReadWriteJSONv6 - Create JSON file
[main] INFO ReadWriteJSONv6 - Read the json file
[main] INFO ReadWriteJSONv6 - ==========================
[main] INFO ReadWriteJSONv6 - Print all data
[main] INFO ReadWriteJSONv6 - ==========================
[{"person":{"isRegistered":true,"LastName":"Travase"},"id":"7"},{"person":{"isRegistered":true,"LastName":"Ken"},"id":"8"}]
[main] INFO ReadWriteJSONv6 - ==========================
[main] INFO ReadWriteJSONv6 - Print data 1 by 1
[main] INFO ReadWriteJSONv6 - ==========================
7
true
Travase
8
true
Ken
[main] INFO ReadWriteJSONv6 - ==========================
[main] INFO ReadWriteJSONv6 - Print data per id
[main] INFO ReadWriteJSONv6 - ==========================
KEY; person value :{"isRegistered":true,"LastName":"Travase"}
KEY; id value :7
KEY; person value :{"isRegistered":true,"LastName":"Ken"}
KEY; id value :8————————————
▼4. 参考情報
————————————
json-simple Google Code Archive – Long-term storage for Google Code Project Hosting.
以上です。参考になりましたら幸いです。