JSON ファイルの読み込み
JSON は構造化データを表現するためのテキストファイルの一種です。 構造化されたデータをテキストやバイト列に変換することを シリアライゼーション と呼びます。 JSON は構造化データの通信で広く利用されるシリアライゼーション形式の 1 つです。 JSON は、元々は JavaScript でのオブジェクトを表記するための形式でしたが、現在では言語を問わずに多くの場面で利用されています。 JSON ファイルは、オブジェクト構造と配列構造のいずれになっています。
Processing でオブジェクト構造の JSON ファイルを読み込むためには loadJSONObject
関数を使用します。
以下はオブジェクト構造の JSON ファイルの例です。
{
"name": "Aさん",
"height": 171.9,
"weight": 64.3
}
これを object.json
として data
フォルダに保存しておきましょう。
object.json
を読み込んで中身をコンソールに表示するプログラムは以下のようになります。
JSONObject json = loadJSONObject("object.json");
println("氏名:" + json.getString("name"));
println("身長:" + json.getFloat("height"));
println("体重:" + json.getFloat("weight"));
loadJSONObject
関数はJSONObject
型の結果を返します。
ここでは読み込んだ結果を json
という名前の変数に格納しています。
JSON のオブジェクトは、プロパティ名: 値
の形式でデータが格納されています。
json
の getString
, getInt
, getFloat
, getBoolean
にプロパティ名の文字列を渡すことで、値をそれぞれ文字列、整数、実数、真理値として取得することができます。
実行結果は以下のようになります。
氏名:Aさん
身長:171.9
体重:64.3
Processing で配列構造の JSON ファイルを読み込むためには loadJSONArray
関数を使用します。
以下は配列構造の JSON ファイルの例です。
[
"これは文字列です。",
"次の要素は整数です。",
123456789,
"次の要素は実数です。",
3.14159265359,
"次の要素は真理値です。",
true
]
これを array.json
として data
フォルダに保存しておきましょう。
array.json
を読み込んで中身をコンソールに表示するプログラムは以下のようになります。
JSONArray json = loadJSONArray("array.json");
println("要素数:" + json.size());
println(json.getString(0));
println(json.getString(1));
println(json.getInt(2));
println(json.getString(3));
println(json.getFloat(4));
println(json.getString(5));
println(json.getBoolean(6));
loadJSONArray
関数はJSONArray
型の結果を返します。
json
の getString
, getInt
, getFloat
, getBoolean
に配列の添字を渡すことで、値をそれぞれ文字列、整数、実数、真理値として取得することができます。
JSONArray
の要素数は size()
メソッドによって取得することができます。
実行結果は以下のようになります。
要素数:7
これは文字列です。
次の要素は整数です。
123456789
次の要素は実数です。
3.1415927
次の要素は真理値です。
true
JSON は入れ子のデータ構造であるため、配列やオブジェクトの中に配列やオブジェクトを格納することができます。
現在の配列やオブジェクトの中から、内側の配列とオブジェクトを取得するにはそれぞれ getJSONArray
と getJSONObject
を使用します。
以下は入れ子構造を持った JSON ファイルの例です。
{
"records": [
{
"name": "Aさん",
"height": 171.9,
"weight": 64.3
},
{
"name": "Bさん",
"height": 171.9,
"weight": 64.3
},
{
"name": "Cさん",
"height": 171.9,
"weight": 64.3
},
{
"name": "Dさん",
"height": 171.9,
"weight": 64.3
},
{
"name": "Eさん",
"height": 171.9,
"weight": 64.3
}
]
}
ファイル全体は records
というプロパティを 1 つだけ持ったオブジェクトです。
records
の中身は要素数 5 の配列です。
records
の各要素は、name
, height
, weight
のプロパティを持ったオブジェクトです。
これを data.json
として data
フォルダに保存しておきましょう。
data.json
を読み込んで中身をコンソールに表示するプログラムは以下のようになります。
JSONObject json = loadJSONObject("data.json");
JSONArray records = json.getJSONArray("records");
for (int i = 0; i < records.size(); ++i) {
JSONObject record = records.getJSONObject(i);
println((i + 1) + "人目");
println("氏名:" + record.getString("name"));
println("身長:" + record.getFloat("height"));
println("体重:" + record.getFloat("weight"));
}
はじめに、json
から getJSONArray
で records
を取り出し、要素数分のループで records
の i
番目の record
を取得しています。
getString
と getFloat
によって record
の値を取得しています。
実行結果は以下のようになります。
1人目
氏名:Aさん
身長:171.9
体重:64.3
2人目
氏名:Bさん
身長:171.9
体重:64.3
3人目
氏名:Cさん
身長:171.9
体重:64.3
4人目
氏名:Dさん
身長:171.9
体重:64.3
5人目
氏名:Eさん
身長:171.9
体重:64.3