とにかくシンプルなjson
jsonデータは基本は外部から読み込むことになりますが、練習なのでとりあえずjavascript内の変数内に直に書きます。
「:(コロン)」で区切ったキーと値を一組として、2組目を「,(コンマ)」で区切って記述していきます。
それらを{}で囲むことで一つのオブジェクトとして扱います。
値には文字列、数値以外にも真偽値、配列、オブジェクトなどが入れられます。
まあ、この辺は言葉より実際見る方がわかりやすいっすね。
例えば「山田さん、21才」というデータは下記になります。
var data = {
"name": "山田",
"age": 21
}
dataという変数に「山田」という値を持つ「name」キーと、「21」という値を持つ「age」キーが1組が入っているわけですね。
では、次にこのjsonデータを表示してみましょう。
取り出し方は変数名「.(ドット)」のあとにキー名を続けて書くだけです。
この場合dataという変数宣言をしましたので「data.name」で「山田太郎」が抜き出せます。
とりあえずアラートで表示してみます。
alert('name:' + data.name + ' age:' + data.age);
2組以上のオブジェクトを持つjsonデータ
「山田さん、21才」というデータを表示できたわけですが、一人のデータしかたなったらjsonな意味がないのでどんどん追加していきましょう。
「佐藤さん、56才」「鈴木さん、33才」を追加していきます。
var data = [
{ "name": "山田", "age": 21 },
{ "name": "佐藤", "age": 56 },
{ "name": "鈴木", "age": 33 }
]
{}を一人として「,」で区切って追加していきます。
複数人になるわけですから配列として扱うことになります。全体を[]で囲んであげましょう。
ちなみに「,(コンマ)」のあとは最初のように改行しても、しなくても大丈夫です。
オブジェクトを取り出す場合for/in文を使うと簡単なようです。
あと、いつまでもアラートじゃ芸がないので、リストで表示してみます。
htmlの適当な場所にulをid=outputでマークアップしてliで追加していきます。
html
<ul id="output"></ul>
JavaScript
for(var i in data){
$("#output").append("<li>" + data[i].name + "(" + data[i].age + "才)</li>");
}
子要素を持つjsonデータ
山田さんとか渡辺さんとか2、3人ならいいですが、20人とか30人になったとき「どこの山田だよ!」ってなりそうですね。
そんなことで困ったとき「営業部の山田さん」とか言えたら便利な気がします。
ということで今回は営業部というグループに山田さんたちを入れて扱うようにしたいと思います。
データ構造は「division」「person」というキー名を並列に付けて、「division」に「営業部」という値を入れ、「person」には前回作った山田さん、佐藤さん、鈴木さんを配列として入れてやりましょう。
var data =
[{
"division": "営業部",
"person": [
{ "name": '山田', "age": 21 },
{ "name": '佐藤', "age": 56 },
{ "name": '鈴木', "age": 33 }
]
},
{
"division": "製造部",
"person": [
{ "name": '阿部', "age": 44 },
{ "name": '藤沢', "age": 19 },
{ "name": '渡辺', "age": 26 }
]
}];
営業部だけでは寂しいので製造部も作ってみました。
で、次は例のごとく取り出して表示します。
これまでは1階層の構造だったので変数.キー名(data.name)で取り出してましたが、2階層の場合はさらに「.」で区切ってキー名を書いていきます。
例えば上記のデータで製造部の藤沢さんを取り出したい場合「data[1].person[1].name」となります。
また全て抜き出すにはループも2回させる必要がありそうです。
for(var i in data){
$("#output").append("<li><strong>" + data[i].division + "</strong></li>");
for(var j in data[i].person){
$("#output").append("<li>" + data[i].person[j].name + "(" + data[i].person[j].age + "才)</li>n");
}
}
jsonデータを外部ファイルで読み込む
最後に今まで内部で書いていたjsonのデータを外部ファイルとして読み込んでみましょう。
var dataの変数の中をそのままdata.jsonという名前で保存します。
data.json
[{
"division": "営業部",
"person": [
{ "name": "山田", "age": 21 },
{ "name": "佐藤", "age": 56 },
{ "name": "鈴木", "age": 33 }
]
},
{
"division": "製造部",
"person": [
{ "name": "阿部", "age": 44 },
{ "name": "藤沢", "age": 19 },
{ "name": "渡辺", "age": 26 }
]
}]
getJSON関数を使えば簡単にjsonデータを読み込んで使用することができます。
第一引数にjsonファイルのURLを指定して、第2引数にfunction(変数名)と書けば、jsonのデータをそのまま変数の中に入れることができます。
jsonデータは前回と同じなので、表示は同じように書いていくだけですね。
javascript
<script type="text/javascript">
$(document).ready(function () {
$.getJSON("data.json", function(data){
for(var i in data){
$("#output").append("<li><strong>" + data[i].division + "</strong></li>");
for(var j in data[i].person){
$("#output").append("<li>" + data[i].person[j].name + "(" + data[i].person[j].age + "才)</li>n");
}
}
});
});
</script>
