什麼是 JSON

先簡單的談一下什麼是 JSON
miHSEo0JSON 全稱 Javascrīpt Object Notation是一種非常輕量級的資料交換格式
TZX`y@(~0它是基於Javascrīpt Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集PHPChina 开源社区门户t G U$cue
JSON 主要利用了成對的 {} 來包住各個object(物件),用成對的 [] 來包各個array(陣列),
jL Ge/w[0用成對的 "" 來包住各字串,用逗號來區隔各變數而資料型態有 string, number, array, object
`j]*wA5v0PHPChina 开源社区门户h{2fB e0Gd1ex:^
下面簡單的JSON格式,敘述了一個 object json 擁有一個成員變數,這個成員變數中有含有三個物件
Q bMy'b0[php]var json = {PHPChina 开源社区门户 JgYC!`9p{'dJ/D
        'query' : [
J*d7A ZR Q0                {'id':'1','type':'a','title':'PHP 5.2.0 的新功能 JSON decoder & encoder'},PHPChina 开源社区门户o4r9^Cb w
                {'id':'2','type':'b','title':'JSON 全稱 Javascrīpt Object Notation'},
n!j9TKQB|o#c0                {'array': ['A', 'B','C', 'D', 'E']}PHPChina 开源社区门户n_;E.n"G%J
        ]PHPChina 开源社区门户_"Tf]uTW
    };
V+WGK4}ZS0[/php]
h5JtcH(/0如此,我們可以獲得一個叫做 json 的Object,而這個json Object中包含一個獨立的成員 queryPHPChina 开源社区门户V.CkT-S3dS }
而query包含一個Array ,這個Array中又含了三個Object,前面二個Object含有三個成員
]$` sZ7f/}%n&@w0id,type,title,而最後一個Object array 包含一個陣列,如此解釋還明白吧?
.^8EN9p$T&T0
7a&f,My?aN5o{0但是要怎麼用呢?
qQ{2Hq0很簡單PHPChina 开源社区门户4o5]8t e@/p L2? s
alert('I have ' +json.query.length + ' object.');PHPChina 开源社区门户XM�eo PMNL
//alert I have 3 object.
x+ZA$_(V0alert('type='+json.query[1].type+'/r/ntitle'+json.query[1].title);
$h+~ HeR0//alert type=b title=JSON 全稱 Javascrīpt Object NotationPHPChina 开源社区门户+JL0|Rn
alert('陣列索引3='+json.query[2].array[3]);PHPChina 开源社区门户qOi*] bA3X,w
//alert 陣列索引3=D
/{]-q3s'~-p)P0PHPChina 开源社区门户%p"_d&u.y
這樣操作資料時更簡便,不需要和複雜的DOM打交道,所需要的資料可以很輕鬆的取得PHPChina 开源社区门户Jw0IZ;X1E?$y
例如上面的例子 json.query[ i ].title 如此就可以取得第i筆的title內含的值PHPChina 开源社区门户 O?zHpz
PHP的發展是很迅速,當程式界對JSON還一知半解時或者全然不知何為JSON時PHPChina 开源社区门户6`.E,U9y6Sb&T
PHP已經在最新的版本5.2.0中納入核心,並且預設狀態是啟用,相較於其他的scrīpt語言PHPChina 开源社区门户9P,V:S^D H�C
PHP可謂一馬當先,在5.2.0版本中為JSON實作了兩個函數 json_decode() 和 json_encode()PHPChina 开源社区门户?2[3gRf6uf
前者是將JSON格式的字串還原成PHP原生的陣列
%ao5aLl0後者則是將PHP原生陣列編譯成JSON格式的字串PHPChina 开源社区门户R7jZ;Sc!UI:S7[ I
不過,由於Javascrīpt支援Unicode,如果在存取資料庫時使用非Ascii的字元,如中、日、韓
.H.H/qDe3l A$G0需要將字元編碼轉換成UTF8,不然經過json_encode()後的字串會是亂碼PHPChina 开源社区门户MmMW-e
========================================================
}0K@+J4ze2~0經過上一篇簡單介紹JOSN後PHPChina 开源社区门户Z+e#[-sKk`
本篇就來實作如何使用JOSN
*Zj3bj7iA0下面範例使用需要使用MySQL4.1以上版本
m*~7j6uY$|EAU0編碼全程採用utf8
EQVDR2o+l u0承接上一篇的資料格式,表中共有三個欄位id,type,title
^.^7l%F?L0資料表規格如下PHPChina 开源社区门户N$@ NTM#UW1J
[php]PHPChina 开源社区门户4zW6} wBN%q)U3~E
CREATE TABLE `news` (
6BnMiAaA;n0  `id` int(10) unsigned NOT NULL auto_increment,
'E%c0W `8m2A0y0  `type` varchar(255) NOT NULL default '',PHPChina 开源社区门户5K_.z_lY pV
  `title` varchar(64) NOT NULL default '',PHPChina 开源社区门户'f!pH-nS f-~-L
  PRIMARY KEY  (`id`)PHPChina 开源社区门户9mX*^5t&I{{E%e
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
V%N5J7e2HJ%T/j8f&d0[/php]
y9a@h0^7g0[php]PHPChina 开源社区门户[&^N*NH5]HeP
PHPChina 开源社区门户9ds3lD2r ze?
//建立連線
R@lv�R+g0
$conn = mysqli_connect("localhost", 'root', '')or die('連不上資料庫');PHPChina 开源社区门户(|6n7ni$Ia
//選擇資料庫
]#R H/oq[4b/E0
mysqli_select_db($conn,'mydata') or die('不能選資料庫');
%DoX9A?0
//設定連線編碼規則,不懂上google找PHPChina 开源社区门户(t,x"qb?
mysqli_query($conn,'SET NAMES 'utf8'');
p4N6v.gDD|0
//取出資料PHPChina 开源社区门户[Sxj D'F
$results = mysqli_query($conn,'SELECT id,type,title FROM news');
1N~MCt'bi0
//Josn字串PHPChina 开源社区门户Th)U$g8~
$json = '';PHPChina 开源社区门户B6}vTEJP@,n]
//因為是範例,所以自行控制迴圈PHPChina 开源社区门户c#y%X} Vv'Hj/
$i=0;PHPChina 开源社区门户g*N8gJvLPF
while(
$row = mysqli_fetch_assoc($results))PHPChina 开源社区门户D3^GrQ$n'h;n
{
C Xa%e6@q L@1v0   
$i++;   
;l$v)uFDABD So2M7N0   
$json .= json_encode($row);PHPChina 开源社区门户;Z5@'o~HtK
   
//資料表中只放三筆資料,所以在第三筆時不需要在尾巴加上 ",",記得,最後一筆資料不用加上","
s"F7H/G%w0   
if ($i<3)PHPChina 开源社区门户+~4Rx6p E*~
    {
i8e Lh/k;e9A0        
$json .= ",";
J{h'N:[z'|](D(F0    }PHPChina 开源社区门户E,s!oUd8}'Y9T
    PHPChina 开源社区门户h`guQ1U
}PHPChina 开源社区门户L;`bSq5Fx7D+yT
//將資料包進陣列中
L,K/r GE0
$json = '{"query":[ '.$json.']}';?>
^l]X&u#Y8T0
html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">PHPChina 开源社区门户^8r#Bk0kKB5U
xml:lang="zh-tw" lang="zh-tw" >   
7N ?W_1Kr xNVO"A0
u O&ci%Q0    Json範例
m#|cgec5R'U Xm0    PHPChina 开源社区门户?Wu9O9}OI6Iq
   
.uiKl2W0   
u [&{vh(K3z0            
Q,v2| b(^ h'w0        PHPChina 开源社区门户+Rn&V9VZ*Xlm:U�V

lE@YlhLq&z0
fyM{5unl0
?"{ay#a!FC0    var json = echo $json?>;
IsF i8H@ G9m0    alert('I have ' +json.query.length + ' object.');
/[-CTI N0cS0    alert('type='+json.query[1].type+'rntitle'+json.query[1].title);PHPChina 开源社区门户U%t u&Dk
    //上一篇簡介中使用過
|3uK'x {0jD0
PHPChina 开源社区门户7r"w/h["j
還原Json

0S_G-m;_0.L#bG;w-F0aQ0//將字串解碼PHPChina 开源社区门户 DKWH l]kz
$s_JSON_Decoded = json_decode($json,true);
w Va0z"C7R0
//取回資料
hk7O5m%oin�oL0
foreach ($s_JSON_Decoded as $row)PHPChina 开源社区门户5d'y$}9h.zWe
{
C:Zwr[kb0    foreach (
$row as $rowa)PHPChina 开源社区门户&r,u8DM&U
    {PHPChina 开源社区门户UuJ,OK:qqDz6a
        echo
$rowa['title']."
"
;
/$W;[rv0    }PHPChina 开源社区门户*p4t/U1K9}7I'b EIM"b
    PHPChina 开源社区门户ZnB5y L'_%Nb P
}
v3/7GZbO0
?>
Tih'x2My6q0

YW/o"l@,Ahw%`0

:y8u } }L5G~@0[/php]PHPChina 开源社区门户%s"D2R1G/{Q-^1~fL
經過簡單的演練後PHPChina 开源社区门户gP,UkVu4@1j
相信大家對JSON這玩意有更深一層的瞭解
p:Mf]/t�C+W1M~0當然JSON的應用不只是範例中那麼簡單
G0Kd {"?M0有興趣一起研究吧 PHPChina 开源社区门户r:]*@/7W%vm,n^"h2Hk

你可能感兴趣的:(什麼是 JSON)