2007年7月20日 星期五

到底什麼是JSON

以前在看網頁程式設計(PHP, XML)的工具書時,常常會在附錄看到JSON這個名詞,以前一直以為是個很複雜的技術,結果昨天在syshen的blog上看到了一篇JSON的介紹和使用,真是超棒的!看完之後我才知道JSON只是一種表達物件跟陣列的方式而已。

看了那篇文章之後,我也想要把巴豆夭某些看起來有點ugly的程式碼改成JSON,像是下面這個:

var token = rcvData.split('=');
var col = token[0].split(',');
var value = token[1].split(',');

for(var i = 0; i < col.length; i++)
{
if(col[i] == "school_no") var school_no = value[i];
if(col[i] == "school_longitude") map_lng = value[i];
if(col[i] == "school_latitude") map_lat = value[i];
if(col[i] == "school_name") var school_name = value[i];
}

rcvData的格式是這個樣子:
school_no,school_name,school_longitude,school_latitude=1,國立宜蘭大學,121.7607320573,24.9325702375

用這個for loop來做這些事情,之後就是用school_no, school_name這些來取值,如果有新增欄位的話,我還要另外再寫一行if才能取值。

因為上面的for loop實在太蠢了,所以我就用JSON加上prototype.js的evalJSON()函式,寫成下面這樣子:

var token = rcvData.split('=');
var col = token[0].split(',');
var value = token[1].split(',');
var json = '';

for(var i = 0; i < col.length; i++)
{
json += '"' + col[i] + '":"' + value[i] + '",';
}
json = ('{' + json.substr(0, json.length - 1) + '}').evalJSON();

//json = {"school_no":"1","school_name":"國立宜蘭大學","school_longitude":"121.7607320573","school_latitude":"24.9325702375"}

看起來有點複雜對不對,不過經過了上面這一串處理之後,我就可以用json.school_no, json_school_name來取值了,而且無論我的欄位再怎麼增加,我的程式碼都不用做修改,這實在是太方便了呀!

感謝上天讓我知道了有這麼好用的東西,而且JSON可以用在各個programming language喔,像是C, perl, Ruby之類的,所以大家快來用JSON吧。

參考資料:
JSON
syshen's blog - yam天空部落
syshen's blog:JSON - 樂多日誌
巴豆夭
Prototype JavaScript framework: Easy Ajax and DOM manipulation for dynamic web applications

2 則留言:

HooPower 提到...

这不是Javascript的语法呀,{}定义一个Object对象呀,[]定义一个数组呀。怎么又叫做JSON呢!

版主回覆:(07/24/2007 04:29:33 PM)


不好意思,我後來把產生的格式又加上去了,你指的應該是我最後的那一段吧?

天秤女~佳佳 提到...

借轉一下

我在研究xml and json