PHP6 先修班 JSON实例代码

yipeiwu_com5年前PHP代码库
它是基於JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集
JSON 主要利用了成對的 {} 來包住各個object(物件),用成對的 [] 來包各個array(陣列),
用成對的 "" 來包住各字串,用逗號來區隔各變數而資料型態有 string, number, array, object

下面簡單的JSON格式,敘述了一個 object json 擁有一個成員變數,這個成員變數中有含有三個物件

复制内容到剪贴板代码:
var json = {
'query' : [
{'id':'1','type':'a','title':'PHP 5.2.0 的新功能 JSON decoder & encoder'},
{'id':'2','type':'b','title':'JSON 全稱 JavaScript Object Notation'},
{'array': ['A', 'B','C', 'D', 'E']}
]
};
如此,我們可以獲得一個叫做 json 的Object,而這個json Object中包含一個獨立的成員 query
而query包含一個Array ,這個Array中又含了三個Object,前面二個Object含有三個成員
id,type,title,而最後一個Object array 包含一個陣列,如此解釋還明白吧?

但是要怎麼用呢?
很簡單
alert('I have ' +json.query.length + ' object.');
//alert I have 3 object.
alert('type='+json.query[1].type+'\r\ntitle'+json.query[1].title);
//alert type=b title=JSON 全稱 JavaScript Object Notation
alert('陣列索引3='+json.query[2].array[3]);
//alert 陣列索引3=D

這樣操作資料時更簡便,不需要和複雜的DOM打交道,所需要的資料可以很輕鬆的取得
例如上面的例子 json.query[ i ].title 如此就可以取得第i筆的title內含的值
PHP的發展是很迅速,當程式界對JSON還一知半解時或者全然不知何為JSON時
PHP已經在最新的版本5.2.0中納入核心,並且預設狀態是啟用,相較於其他的Script語言
PHP可謂一馬當先,在5.2.0版本中為JSON實作了兩個函數 json_decode() 和 json_encode()
前者是將JSON格式的字串還原成PHP原生的陣列
後者則是將PHP原生陣列編譯成JSON格式的字串
不過,由於Javascript支援Unicode,如果在存取資料庫時使用非Ascii的字元,如中、日、韓
需要將字元編碼轉換成UTF8,不然經過json_encode()後的字串會是亂碼
========================================================
經過上一篇簡單介紹JOSN後
本篇就來實作如何使用JOSN
下面範例使用需要使用MySQL4.1以上版本
編碼全程採用utf8
承接上一篇的資料格式,表中共有三個欄位id,type,title
資料表規格如下
复制内容到剪贴板代码:
CREATE TABLE `news` (
`id` int(10) unsigned NOT NULL auto_increment,
`type` varchar(255) NOT NULL default '',
`title` varchar(64) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
复制内容到剪贴板代码:
<?php
//建立連線
$conn = mysqli_connect("localhost", 'root', '')or die('連不上資料庫');
//選擇資料庫
mysqli_select_db($conn,'mydata') or die('不能選資料庫');
//設定連線編碼規則,不懂上google找
mysqli_query($conn,'SET NAMES 'utf8'');
//取出資料
$results = mysqli_query($conn,'SELECT id,type,title FROM news');
//Josn字串
$json = '';
//因為是範例,所以自行控制迴圈
$i=0;
while($row = mysqli_fetch_assoc($results))
{
$i++;
$json .= json_encode($row);
//資料表中只放三筆資料,所以在第三筆時不需要在尾巴加上 ",",記得,最後一筆資料不用加上","
if ($i<3)
{
$json .= ",";
}

}
//將資料包進陣列中
$json = '{"query":[ '.$json.']}';?>
<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="zh-tw" lang="zh-tw" >
<head>
<title>Json範例</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta name="generator" content="mamba" />
</head>
<body>
<script type="text/javascript">
var json = <?php echo $json?>;
alert('I have ' +json.query.length + ' object.');
alert('type='+json.query[1].type+'rntitle'+json.query[1].title);
//上一篇簡介中使用過
</script>
還原Json<br>
<?php
//將字串解碼
$s_JSON_Decoded = json_decode($json,true);
//取回資料
foreach ($s_JSON_Decoded as $row)
{
foreach ($row as $rowa)
{
echo $rowa['title']."<br>";
}

}
?>
</body>
</html>
經過簡單的演練後
相信大家對JSON這玩意有更深一層的瞭解
當然JSON的應用不只是範例中那麼簡單
有興趣一起研究吧

相关文章

linux系统上支持php的 iconv()函数的方法

1、下载libiconv函数库http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.9.2.tar.gz; 2、解压缩tar -zxvf libi...

PHP IDE PHPStorm配置支持友好Laravel代码提示方法

PHP IDE PHPStorm配置支持友好Laravel代码提示方法

PHPStorm神器可以支持更友好的laravel框架代码提示(点击查看),只需要执行如下才做: 第一步:在项目的composer.json中添加如下一行 复制代码 代码如下: "req...

php设计模式 Facade(外观模式)

php设计模式 Facade(外观模式)

模式定义:外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得...

百度工程师讲PHP函数的实现原理及性能分析(二)

百度工程师讲PHP函数的实现原理及性能分析(二)

类方法 类方法其执行原理和用户函数是相同的,也是翻译成opcodes顺次调用。类的实现,zend用一个数据结构zend_class_entry来实现,里面保存了类相关的一些基本信息。这个...

PHP设计模式之PHP迭代器模式讲解

PHP设计模式之PHP迭代器模式讲解

迭代器有时又称光标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如list或vector)上遍访的接口,设计人员无需关心容器物件的内容。 各种语言实作It...