什麼是 JSON

原创 2007年09月28日 16:07:00

先簡單的談一下什麼是 JSON
miH SEo0JSON 全稱 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 开源社区门户 JgY C!`9p{'d J/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]u TW
    };
V+WGK4}ZS0[/php]
h5Jtc H(/0如此,我們可以獲得一個叫做 json 的Object,而這個json Object中包含一個獨立的成員 queryPHPChina 开源社区门户V.Ck T-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|R n
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[3gRf6u f
前者是將JSON格式的字串還原成PHP原生的陣列
%ao5aLl0後者則是將PHP原生陣列編譯成JSON格式的字串PHPChina 开源社区门户R7jZ;S c!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$@ N TM#UW1J
[php]PHPChina 开源社区门户4zW6} wBN%q)U3~E
CREATE TABLE `news` (
6BnMiA aA;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-n S 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
<?phpPHPChina 开源社区门户9ds3lD2r z e?
//建立連線
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)uF DABD 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
<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">PHPChina 开源社区门户^8r#Bk0kKB5U
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="zh-tw" lang="zh-tw" >   
7N ? W_1Kr xNVO"A0<head>
u O&ci%Q0    <title>Json範例</title>
m#| cgec5R'U Xm0    <meta http-equiv="Content-Type" c />PHPChina 开源社区门户?Wu9O9}OI6Iq
    <meta http-equiv="Pragma" c />
.uiKl2W0    <meta http-equiv="Expires" c />
u [&{vh(K3z0    <meta http-equiv="Cache-Control" c />        
Q,v2| b(^ h'w0    <meta name="generator" c />    PHPChina 开源社区门户+Rn&V9VZ*Xlm:U�V
</head>
lE@YlhLq&z0<body>
fyM{5u n l0<scrīpt type="text/javascrīpt">
?"{ay#a!F C0    var json = <?php 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&D k
    //上一篇簡介中使用過
|3uK'x {0jD0</scrīpt>PHPChina 开源社区门户7r"w/h["j
還原Json<br>
0S_ G-m;_0<?php
.L#bG;w-F0aQ0
//將字串解碼PHPChina 开源社区门户 DKWH l]kz
$s_JSON_Decoded = json_decode($json,true);
w Va0z"C7R0
//取回資料
hk7O5m%o in�oL0
foreach ($s_JSON_Decoded as $row)PHPChina 开源社区门户5d'y$}9h.zWe
{
C:Z wr[kb0    foreach (
$row as $rowa)PHPChina 开源社区门户&r,u8DM&U
    {PHPChina 开源社区门户UuJ,OK:qqDz6a
        echo
$rowa['title']."<br>";
/$W;[rv0    }PHPChina 开源社区门户*p4t/U1K9}7I'b EIM"b
    PHPChina 开源社区门户ZnB5y L'_%Nb P
}
v3/7GZbO0
?>
Tih'x2My6q0
</body>
YW/o"l@,Ahw%`0</html>

: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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

char s[]字串和char *s字串有什麼差別? (C/C++) (C)

Abstract C語言有兩種字串宣告方式char s[]和char *s,兩者有什麼差異呢? Introduction char s[] = "Hello World"; cha...

在xml裡面用的Layout_weight是什麼意思

在layout_width設置為fill_parent的時候,layout_weight所代表的是你的控件要優先盡可能的大,但這個大是有限度的,即fill_parent. 在layout_width...

淺談 HTTP Method:表單中的 GET 與 POST 有什麼差別?

转载自 http://blog.toright.com/archives/1203 Introduction 會寫這篇文章的原因為某位正在唸書的同學向我提出的疑問,讓我發現 H...

association,aggregation,composition有什麼差別?

class之間有三種關係,inheritance,implementation和association。inheritance和implementation在C++、C#、Java都有直接支援,所以不...
  • sulliy
  • sulliy
  • 2011-08-18 23:40
  • 1032

繁体字非主流伤感日志_親愛的,為什麼

繁体字非主流伤感日志_親愛的,為什麼 — 繁体字非主流伤感日志_親愛的,為什麼 親愛的,請問,當我對妳說我愛妳的時候.妳的心裡冇我嘛?- 親愛的,請問,在妳知道我背上冇一道疤時.妳對我的關心...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)