網頁

2013年1月10日 星期四

Log Day4 JSON


之前有聽過JSON的名詞,
當時的瞭解為跟XML一樣的資料儲存的格式,
主要特性: lightweight text-data interchange format, language independent, "self-describing"

其中language independent與self-describing是跟XML一樣的,
主要是因為用JavaScript的語法來描述文字資料,
所以才會稱之為"JavaScript Object Notation",
但事實上還是language independent.
既然是序列化(serialization)的一個格式,
總是有parser與encoder之類的東西,
很多語言都有實作JSON.parse與JSON.encode這樣的函式,
實際一個JSON會長這樣:
var txt = '{ "employees" : [' +
'{ "firstName":"John" , "lastName":"Doe" },' +
'{ "firstName":"Anna" , "lastName":"Smith" },' +
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';

假如在JavaScript中要讀入的話, 可以用eval搭配括號()
var obj = eval ("(" + txt + ")"); 

在php的話可以用類似底下的語法來轉回php物件:
$obj = $json_decode($txt);
print $obj->employees[0]->firstName;

JSON也可用在傳輸Ajax的資料,
假如要拿來跟XML比較的話:
類似XML的地方:
  • 純文字 (JSON is plain text) (其實XML有可以定義binary)
  • 自我表述 (JSON is "self-describing") (human readable, 蠻牽強, 應是指對應程式資料)
  • 有階層性 (JSON is hierarchical) (values within values)
  • 可透過JavaScript處理 (JSON can be parsed by JavaScript)
  • 可使用Ajax傳輸 (JSON data can be transported using AJAX)
不像XML的地方:
  • 沒有結尾tag (No end tag)
  • 較短 (Shorter)
  • 讀寫快速 (Quicker to read and write)
  • 可直接用JavaScript內建的eval解析 (Can be parsed using built-in JavaScript eval())
  • 使用array (Uses arrays)
  • 沒有保留字 (No reserved words)
以開發Ajax程式來說,
JSON會比XML便利很多,
因為JSON可以在JavaScript中用eval直接轉成JavaScript的array,
而XML還需要透過DOM parser來處理.

沒有留言:

張貼留言