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 のオブジェクトは、プロパティ名: 値 の形式でデータが格納されています。 jsongetString, 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 型の結果を返します。 jsongetString, getInt, getFloat, getBoolean に配列の添字を渡すことで、値をそれぞれ文字列、整数、実数、真理値として取得することができます。 JSONArray の要素数は size() メソッドによって取得することができます。

実行結果は以下のようになります。

要素数:7
これは文字列です。
次の要素は整数です。
123456789
次の要素は実数です。
3.1415927
次の要素は真理値です。
true

JSON は入れ子のデータ構造であるため、配列やオブジェクトの中に配列やオブジェクトを格納することができます。 現在の配列やオブジェクトの中から、内側の配列とオブジェクトを取得するにはそれぞれ getJSONArraygetJSONObject を使用します。

以下は入れ子構造を持った 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 から getJSONArrayrecords を取り出し、要素数分のループで recordsi 番目の record を取得しています。 getStringgetFloat によって 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

results matching ""

    No results matching ""