网站开发日志

2009年7月22日星期三

分享家:Addthis中国

PHP和json简介

我在日志里曾经介绍过如何使用jQuery解析JSON格式的feed。今天准备简单介绍如何使用PHP输出JSON格式的Feed以及如何使用PHP解析JSON格式的Feed。JSON是一种轻便的数据交换格式,和XML的用途显示,但是相比之下XML要臃肿许多。至于XML和JSON那个更有优势,我也说不上,但是听说JSON的处理速度要比XML快,似乎挺有道理。JSON是全称是Javascript Object Notation(Javascript对象标记法),它的结构不如XML直观,特别对初学者来说,下面就是一个最基本、最简单的JSON feed的例子,你可以看到一个对象是有一组无序的对数组成,并用大括号括起来;而对数十用逗号分隔;而对数的名称和值用冒号分隔。

{name:adam,date:2009-07-22,title:PHP and JSON}
//最基本的JSON Feed

通常JSON Feed的结构往往不是这么简单,因为他的值得类型很多,可以是string、number、object、array、true、false、null等等,如果你的值里含有控制符号(大括号,冒号,中括号等等),你还要使用转义符。在这里我不准备做详细介绍,你可以参考http://json.org

PHP5.2后PHP自带有JSON的encoder和decoder,PHP5.2以前的版本你可以使用ZEND的JSON库。

使用PHP的JSON encoder,你可以把相关数组转换成JSON格式,下面是一个例子:

<?php
 $today = date("D M j G:i:s T Y");
 $status = array(
     "text" => "大家好!".
         "最近一直都很忙,但是我会尽量经常更新我的日志;" .
         "把学到的东西记录下来、分享给大家",
     "created_at" => "$today"
 );
 $name = array("name" => "adam");
 $status['user'] = $name;
 $myJSONstatus = json_encode($status);
 echo $myJSONstatus;
 ?>
//输出结果:
{"text":"\u5927\u5bb6\u597d\uff01\u6700\u8fd1\u4e00\u76f4\u90fd\u5f88\u5fd9\uff0c\u4f46\u662f\u6211\u4f1a\u5c3d\u91cf\u7ecf\u5e38\u66f4\u65b0\u6211\u7684\u65e5\u5fd7;\u628a\u5b66\u5230\u7684\u4e1c\u897f\u8bb0\u5f55\u4e0b\u6765\u3001\u5206\u4eab\u7ed9\u5927\u5bb6","created_at":"Wed Jul 22 22:33:44 EDT 2009","user":{"name":"adam"}}

注意:以上的输出里有很多4位的十六进制代码,这是因为json_encode把中文都转换为对应的十六进制代码。

和encoder对应,我们还可以使用json decoder把JSON feed转换成object或者array。例如:

<?php
$url = 'http://feeds.delicious.com/v2/json/tags/61dh?count=100';
$jsonfeed = file_get_contents($url);
echo $jsonfeed;
$result = json_decode($jsonfeed, true); 
//把第二个变量是控制输出类型的,true为Array,默认(false)为Object
print_r ($result);
?>
输出结果:
Array
(
    [ajax] => 8
    [CSS] => 19
    [HTML] => 16
    [Javascript] => 37
    [jQuery] => 37
    [jQuery基础] => 11
    [Linux] => 5
    [mySQL] => 3
    [Perl] => 5
    [PHP] => 25
    [PHP实用代码系列] => 4
    [Smarty] => 2
    [博客] => 21
    [浏览器] => 10
    [百度知道] => 4
    [素材] => 2
    [编程开发] => 7
)

http://feeds.delicious.com/v2/json/tags/61dh?count=10 这个链接是美味书签提供的,经常光临我的日志的朋友,可能知道,我没发布一篇文章都会把链接加到美味书签,然后使用它产生本站的日志分类。使用json-decode, 我就可以从json feed里把日志分类和文章数解析出来。

如果你用的5.2以前的版本,你可以使用Zend的Json库,一般PHP服务器带有Zend。使用方法如下:

<?php
require_once 'Zend/Json.php';
//encode例子:
$today = date("D M j G:i:s T Y");
 $status = array(
     "text" => "大家好!".
         "最近一直都很忙,但是我会尽量经常更新我的日志;" .
         "把学到的东西记录下来、分享给大家",
     "created_at" => "$today"
 );
 $name = array("name" => "adam");
 $status['user'] = $name;
echo Zend_Json::encode($status);
//decode例子:
$url = 'http://feeds.delicious.com/v2/json/tags/61dh?count=100';
$jsonfeed = file_get_contents($url);
echo  Zend_Json::decode($jsonfeed);
?>

标签:

相关文章:

0 条评论:

发表评论

指向此帖子的链接:

创建链接