JSONファイルでデータ管理
データを記録するファイル形式にはCSVからXMLまでいろいろなデータ記述言語が存在します。
その中でもJSON形式は軽量で記述しやすいというメリットが多い言語です。
ここではその使い方を簡単に紹介していきます。
JSONとは
JSONは「JavaScript Object Notation」の略でもともとはJavaScriptで使われていたデータ記述言語です。
しかし、軽量でいろいろと便利なのでJavaScript以外でもいろいろな場所で使われています。
JSONで表現できることは次のことです。
- 文字列
文字列を定義するには次のように "" で文字列をくくって表現します。
"ABCDEF"
もし " をエスケープしたいなら
"ABC\"DEF"
のように \ を前につけてエスケープします。また、 \ 自体は \\ で表現できます。
- 配列
複数の値を持つ配列を例えば
["one", "two", "three"]
このように [] でくくって、値を , で区切るだけで配列が表現できます。
- 連想配列
キーと値をペアに持つ連想配列もサポートしています。
例えば
{ "key1":"value1" "key2":"value2" "key3":"value3" }
このように連想配列全体を {} でくくり、: の前にキー名、後ろに値を置くことで簡単に連想配列が作れます。
- 入れ子
連想配列の中に配列があるような入れ子構造を作りたい場合は
{ "array":["a", "b", "c"], "array2":["d", "e", "f"] }
こうすれば連想配列や配列の値として別の配列や連想配列を含めることが可能です。
その他の細かいルールについてはhttp://memopad.bitter.jp/w3c/json/json_syntax.htmlなどが参考になります。
実際に使ってみる
では、実際にJSON形式のデータを使ってみましょう。
ここでは例として次のようなJSONデータを考えてみます。
{ "Eclair":"エクレア" "Donut":"ドーナツ", "Cupcake":"カップケーキ", }
このように英語名とその日本語を対応させた連想配列を定義しました。
それをオブジェクトとして扱うのにJSONObjectを使います。
JSONObject obj = new JSONObject( new StringBuilder() .append("{") .append(" \"Eclair\" : \"エクレア\",") .append(" \"Donut\" : \"ドーナツ\",") .append(" \"Cupcake\" : \"カップケーキ\"") .append("}").toString()); );
これで生のJSONデータからJSONObjectが作られます。
全ての値を取得したい場合はこうします。
Iterator<String> keys = obj.keys(); ///全てのキーを取得 while(keys.hasNext()){ String key = keys.next(); String value = obj.getString(key); Log.d("MainActivity", "キー名 = " + key + " : 値 = " + value); }
これでキーからすべての値が取得できます。
ここでログに出力されたデータの並び順を見てみるとこうなっていました。
キー名 = Cupcake : 値 = カップケーキ キー名 = Donut : 値 = ドーナツ キー名 = Eclair : 値 = エクレア
キー名がデータが出てきた順でなく、ABC順に並び替えられています。
このように連想配列を使うとキー名は自動でABC順に並び替えられてしまうので注意です。
もし順番が大事なデータなら配列(JSONArray)を使うようにした方が良さそうです。
以上、JSONは簡単で便利にデータを記録できるという話でした。では、また!