JSONとはJavaScript Object Notationの略称です。このJSON形式のデータはJavaScriptで式評価が許される(eval()で式評価できる)ものであれば何でも構いません。基本的には以下の形式になります。
{
"プロパティ名" : 値
}
このデータを読み込み利用するにはdata = eval("("+データ+")")とすると変数dataにJSONで定義されたプロパティの値が入ります。例えば以下のようなJSONファイルがあるとします。
{
"userID":"ajax",
"userPW":"xanadu"
}
このデータを変数dataに読み込んだとします。userIDプロパティの値を読み出すにはdata.userIDと記述します。するとajaxの文字が返されます。同様にdata.userPWとするとxanaduの文字が返されます。単純にオブジェクト名.プロパティ名の記述で済みます。プロパティの値には関数なども定義することができます。これによりオブジェクト名.プロパティ名()として末尾にカッコを付加した場合にプロパティの内容=関数が実行されます。つまりメソッドを定義したのと同じことになります。
それでは実際のデータを読み込み表示してみます。以下の商品名とそれに関するデータが記述されたJSONデータを読み込み表示します。(実際の
サンプルを実行する)
●シンプルなJSONデータ
{
"itemCode":91,
"itemName":"塩ラーメン",
"itemPrice":300
}
●スクリプト
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
<title>JSONのデータを表示する</title>
<script type="text/javascript" src="xmlhttp.js"></script>
<script type="text/javascript"><!--
function loadDataFile(fName)
{
httpObj = createXMLHttpRequest(displayData);
if (httpObj)
{
httpObj.open("GET",fName,true);
httpObj.send(null);
}
}
function displayData()
{
if ((httpObj.readyState == 4) && (httpObj.status == 200))
{
$("result").innerHTML = parseJSON(httpObj.responseText);
}
}
// JSONのデータを解析して表示
function parseJSON(jsData)
{
var data = eval("("+jsData+")");
var resultData = "["+data.itemCode+"] "+data.itemName+" : "+data.itemPrice +"円";
return resultData;
}
// --></script>
</head>
<body>
<h1>JSONのデータを表示する</h1>
<p>JSONのデータを読み込み表示します</p>
<form name="ajaxForm">
<input type="button" value="jsondata.txtを読み込み" onClick="loadDataFile('jsondata.txt')"><br>
</form>
<div id="result"></div>
</body>
</html>
JSONデータは単純なテキストファイルなのでresponseTextで取得する必要があります。取得したデータをeval()で評価し、各プロパティを表示すればできあがりです。
実際には商品名が1つということはありません。かなり多くの商品リストがあり、項目も多岐に渡るはずです。このような場合には配列を利用してJSONデータとして定義します。これは以下のようになります。
●複数のデータを含むJSONデータ
{"item":[
{"itemCode":91,
"itemName":"塩ラーメン",
"itemPrice":300},
{"itemCode":94,
"itemName":"味噌ラーメン",
"itemPrice":290},
{"itemCode":95,
"itemName":"豚骨ラーメン",
"itemPrice":320}
]
}
この場合、変数dataにデータが読み込まれた場合、最初のデータ(塩ラーメン)にアクセスするにはdata.item[0].itemCodeのようにします。配列として定義されているので、このように記述することになります。2番目のデータであればdata.item[1].itemCodeとなります。あとは必要に応じてデータの数だけ繰り返せばよいことになります。
上記のデータを表示するプログラムは以下のようになります。(実際の
サンプルを実行する)
●スクリプト
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
<title>JSONのデータを表示する2</title>
<script type="text/javascript" src="xmlhttp.js"></script>
<script type="text/javascript"><!--
function loadDataFile(fName)
{
httpObj = createXMLHttpRequest(displayData);
if (httpObj)
{
httpObj.open("GET",fName,true);
httpObj.send(null);
}
}
function displayData()
{
if ((httpObj.readyState == 4) && (httpObj.status == 200))
{
$("result").innerHTML = parseJSON(httpObj.responseText);
}
}
// JSONのデータを解析して表示
function parseJSON(jsData)
{
var data = eval("("+jsData+")");
var resultData = "<table border='1'>";
for(var i=0; i<data.item.length; i++)
{
var iCode = data.item[i].itemCode; // 商品コード
var iName = data.item[i].itemName; // 商品名
var iPrice = data.item[i].itemPrice; // 商品価格
resultData += "<tr><th>"+iCode+"</th><td>"+iName+"</td><td>"+iPrice+"円</td></tr>";
}
resultData += "</table>";
return resultData;
}
// --></script>
</head>
<body>
<h1>JSONのデータを表示する2</h1>
<p>JSONのデータを読み込み表示します</p>
<form name="ajaxForm">
<input type="button" value="jsondata.txtを読み込み" onClick="loadDataFile('jsondata.txt')"><br>
</form>
<div id="result"></div>
</body>
</html>
ここまででテキスト、CSV、XML、JSONデータを取り扱い表示するサンプルを見てきました。次項ではテキストデータを読み込み、該当データが存在するかどうかといった簡単なデータベース検索を行ってみます。SQL (MySQLやPostreSQLなど) が扱えるサーバーを利用している方は
AjaSQL(高橋登史朗さんのページ)を参照するとSQLと連動してデータ検索を行うことができます。
[
第三章 7:簡単なデータベース検索を行うへ]
[
目次へ]
(2006.1.7)