2011年8月31日 星期三

淺談所謂的JSON(JavaScript Object Notation)



自學web programming差不多一年了 今天想談談所謂的JSON 跟我學習它的時候遇到的一些問題
JSON本來只是JavaScript建立物件的一種方式
是的 JSON顧名思義就只是js表示物件的一種方式而已
舉例來說 js可以用這樣的語法來建立、表示物件 和其他程式語言差不多:
var john = new Person();
john.name = "John";
john.weight = 55;
john.height = 170;
十分直觀 對吧?
不過 js還可以這樣建立物件:
var john = {"name":"John", "weight":55, "height": 170};
這兩種宣告物件的方法 最後得到完全一樣的物件 神奇吧?
這就是JSON?那不就是常見的map、dictionary之類的資料結構嗎?
這是我第一次看到JSON長相的時候 心中浮出的疑問。既然如此 為何要特別命名為JSON?
其實 看這行code: 
var john = {"name":"John", "weight":55, "height": 170};
你會發現他確實就只是個類似map、dictionary這樣的東西
然而 其他程式語言建立的map、dictionary 通常不是在描述一個物件的各個屬性 只是一個可以參照key得到value的「對照表」而已
但是 從哲學上來說 一般的map、dictionary 的確可以視為在描述一個物件的各個屬性 就像js裡面建立物件那樣
說了那麼多 那JSON到底有什麼用?不過就是js的物件表示法而已!幹嘛其他程式語言的語法就沒被這樣強調?
重點來了 JSON到底有什麼用?
這件事得從web的架構談起。各位知道 幾乎所有瀏覽器都支援js這個語言 而伺服器端用的語言則有許多選擇 有PHP ASP Python Java Ruby..等等
每個後端語言雖然都有接近的資料結構 像是array、list、map、dictionary之類幾乎都有 但畢竟是不同的語言 使用的語法以及底層實作的方式不盡相同
如此一來 立刻出現兩個問題
1、前端的js物件如何傳送給後端..?
2、不同的web應用程式之間如何互相傳送物件?
這麼多不同的語言該如何溝通呢?難道要制定一個新的語法標準 讓所有程式語言一同實作嗎?
當然大可這麼做。不過聰明的工程師們想到了一個更簡單而聰明的辦法... 所有後端語言只要都一起支援js這個語言的物件表示法就好了
這麼一來同時解決了以上了兩個問題
那這些後端語言該如何支援js的物件表示法呢?
其實很簡單 只要寫個library能看懂JSON就好
譬如說 我可以用Python寫個library去分析剛剛那行字串(注意 它就只是個字串 別忘了他只是「js物件文字表示法」):
{"name":"John", "weight":55, "height": 170}
怎麼分析?只要設法把它轉成Python裡面的dictionary即可!(去讀裡面的資料 再新做出一個dictionary物件即可!)
而其他程式語言也有相對應的資料結構可以轉換
就這樣!把JSON字串轉成對應的資料結構、把自身的資料結構轉成JSON
從此網路上資料的傳送便更簡單、方便了。
以上僅是個人的理解以及想法 有錯還煩請不吝指正 謝謝。

沒有留言: