JSON简单介绍

2008-3-21  11:28

自从知道JSON后就一直在用它,主要是它实在是个好东西,呵呵,所以贴个简单介绍,给想用的人一点资料。

简介:

JSON:which stands for "JavaScript Object Notation", is a lightweight computer data interchange format. JSON is a subset of the object literal notation of JavaScript but its use does not require JavaScript.(摘自维基百科)

对于JSON的普遍理解是一种类似于XML的数据传输结构,JSON最早也许是由Douglas Crockford提出并创造的,并得到了Digg,Yahoo,google等的大力支持,并且应用在了google map等超大型的项目上。

跟XML相比,JSON的优势在于格式简洁短小,特别是在处理大量复杂数据的时候,这个优势便显得非常突出。从各浏览器的支持来看,JSON解决了因不同浏览器对XML DOM解析方式不同而引起的问题,这些使得JSON在WEB开发中拥有巨大的优势,使它已经完全具备了挑战AJAX的能力。

JSON的数据结构:

{"bindings": [
        {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
        {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
        {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
    ]
}

这是一个结构比较复杂的JSON,被称为一个object,一般性的使用不需要这么复杂的结构

object的结构(也是完整的JSON看起来的样子,不过object也可以被嵌套):

{string:value,string:value,string:value}

string的结构:

"characters"

characters的结构:(不包含“"”,“\”和control字符的0个或者多个Unicode字符,“\”为转意字符)

Unicode \" \\ \/ \b \f \n \r \t \u

value的结构:

characters,number,object,array,true,false,null

number的结构:

1 2 3 4 5 6 7 8 9 0 . e e+ e- E E+ E-

array的结构(可嵌套array和object):

[value,value,value]

JSON的使用:

JSON获得了绝大部分主要程序语言的支持,我们主要介绍JSON在JavaScript和PHP中的使用,以及在两者之间的数据传输实现方式。

使用PHP生成,传输,解析,读取JSON的方式有很多种,最方便的方法是使用php_json.dll,这是一个PHP支持JSON扩展,包含json_encode()和json_decode()两个函数:

json_encode(转换为数组):

<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<?php
$array = array(第一段,第二段,第三段,array(1,2,第四段) );
$json = json_encode($array);
echo $json;
//显示 ["\u7b2c\u4e00\u6bb5","\u7b2c\u4e8c\u6bb5","\u7b2c\u4e09\u6bb5",[1,2,"\u7b2c\u56db\u6bb5"]]
?>

json_encode(转换为对象):

<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<?php
$array = array(title=>JSON的介绍和使用,time=>2006年8月24日,article=> array(first=>第一段,second=>第二段,third=>第三段));
$json = json_encode($array);
echo $json;
//显示 {"title":"JSON\u7684\u4ecb\u7ecd\u548c\u4f7f\u7528","time":"2006\u5e748\u670824\u65e5","article":{"first":"\u7b2c\u4e00\u6bb5","second":"\u7b2c\u4e8c\u6bb5","third":"\u7b2c\u4e09\u6bb5"}}
?>

json_decode(数组的调用):

<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<?php
$json = ["第一段","第二段",[1,2,"第三段"],[3,[4]]];
$array = json_decode($json);
echo $array[2][2];
//显示 第三段
?>

json_decode(对象的调用):

<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<?php
$json = {"title":"JSON\u7684\u4ecb\u7ecd\u548c\u4f7f\u7528","time":"2006\u5e748\u670824\u65e5","article":{"first":"\u7b2c\u4e00\u6bb5","second":"\u7b2c\u4e00\u6bb5","third":"\u7b2c\u4e00\u6bb5"}};
$dom = json_decode($json);
echo $dom->article->first;
//显示 第一段
?>

json_decode(对象中嵌套数组的调用):

<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<?php
$json = {"title":"JSON\u7684\u4ecb\u7ecd\u548c\u4f7f\u7528","time":"2006\u5e748\u670824\u65e5","article":[{"one":"\u7b2c\u4e00\u6bb5","two":"\u7b2c\u4e8c\u6bb5","three":"\u7b2c\u4e09\u6bb5"},{"four":"\u7b2c\u56db\u6bb5","five":"\u7b2c\u4e94\u6bb5","six":"\u7b2c\u516d\u6bb5"}]};
$dom = json_decode($json);
echo $dom->article[1]->five;
//显示 第五段
?>

如果没有条件使用扩展,可以使用Services_JSON,这是一个由Michal Migurski开发的JSON类,包含有详细的documentation文档,可以获得非常详细的使用说明(虽然功能不强大,但也小巧精干),这里我们只简单的介绍一下这个类的使用,使用的效果和上面的完全一样:

$json->encode:

<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<?php
require_once("JSON.php");
$json = new Services_JSON();
$value = $array = array(第一段,第二段,第三段,array(1,2,第四段) );
$output = $json->encode($value);
echo $output;
//显示 ["\u7b2c\u4e00\u6bb5","\u7b2c\u4e8c\u6bb5","\u7b2c\u4e09\u6bb5",[1,2,"\u7b2c\u56db\u6bb5"]]
?>

$json->decode:

<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<?php
require_once("JSON.php");
$json = new Services_JSON();
$value = {"title":"JSON\u7684\u4ecb\u7ecd\u548c\u4f7f\u7528","time":"2006\u5e748\u670824\u65e5","article":[{"one":"\u7b2c\u4e00\u6bb5","two":"\u7b2c\u4e8c\u6bb5","three":"\u7b2c\u4e09\u6bb5"},{"four":"\u7b2c\u56db\u6bb5","five":"\u7b2c\u4e94\u6bb5","six":"\u7b2c\u516d\u6bb5"}]};
$output = $json->decode($value);
echo $output->article[1]->five;
//显示 第五段
?>

在客户端,JSON的官方主页给出了两个方法,使用这两个方法可以方便的处理JSON数据:

toJSONString()方法:

<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<
script language="JavaScript" type="text/javascript" src="json.js"></script>
<script>
var a = new Object;
a.first = "第一段";
a.second = "第二段";
a.third = "第三段";
var c = new Object;
c.title = "JSON的介绍和使用";
c.time = "2006年8月24日";
c.article = a;
document.write(c.toJSONString());
//显示 {"title":"JSON的介绍和使用","time":"2006年8月24日","article":{"first":"第一段","second":"第二段","third":"第三段"}}
<
/script>

parseJSON()方法(为了从字符串中安全的获得一个对象,parseJSON()方法取代了eval()方法):

<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<
script language="JavaScript" type="text/javascript" src="json.js"></script>
<script>
var a = ‘{"title":"JSON的介绍和使用","time":"2006年8月24日","article":{"first":"第一段","second":"第二段","third":"第三段"}}’;
t = a.parseJSON();
document.write(t.article.first)
//显示 第一段
<
/script>
Tags: , , , , , , , ,

发表评论