简介:
JSON:which stands for "Java Object Notation", is a lightweight computer data interchange format. JSON is a subset of the object literal notation of Java but its use does not require Java.(摘自维基百科)
对于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:,string:,string:}
string的结构:
"characters"
characters的结构:(不包含“"”,“\”和control字符的0个或者多个Unicode字符,“\”为转意字符)
Unicode \" \\ \/ \b \f \n \r \t \u
的结构:
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):
[,,]
JSON的使用:
JSON获得了绝大部分主要程序语言的支持,我们主要介绍JSON在Java和PHP中的使用,以及在两者之间的数据传输实现方式。
使用PHP生成,传输,解析,读取JSON的方式有很多种,最方便的方法是使用php_json.dll,这是一个PHP支持JSON扩展,包含json_encode()和json_decode()两个函数:
json_encode(转换为数组):
< 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(转换为对象):
< 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(数组的调用):
< 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(对象的调用):
< 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(对象中嵌套数组的调用):
< 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:
< http-equiv="Content-Type" Content="text/html; charset=utf-8"><?phprequire_once("JSON.php");$json = new Services_JSON();$ = $array = array('第一段','第二段','第三段',array(1,2,'第四段') );$output = $json->encode($);echo $output; //显示 ["\u7b2c\u4e00\u6bb5","\u7b2c\u4e8c\u6bb5","\u7b2c\u4e09\u6bb5",[1,2,"\u7b2c\u56db\u6bb5"]]?>
$json->decode:
< http-equiv="Content-Type" Content="text/html; charset=utf-8"><?phprequire_once("JSON.php");$json = new Services_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"}]}';$output = $json->decode($);echo $output->article[1]->five;//显示 第五段?>
在客户端,JSON的官方主页给出了两个方法,使用这两个方法可以方便的处理JSON数据:
toJSONString()方法:
< http-equiv="Content-Type" Content="text/html; charset=utf-8">< language="Java" type="text/java" src="json.js"></><>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;write(c.toJSONString());//显示 {"title":"JSON的介绍和使用","time":"2006年8月24日","article":{"first":"第一段","second":"第二段","third":"第三段"}} </>
parseJSON()方法(为了从字符串中安全的获得一个对象,parseJSON()方法取代了eval()方法):
< http-equiv="Content-Type" Content="text/html; charset=utf-8">< language="Java" type="text/java" src="json.js"></><>var a = '{"title":"JSON的介绍和使用","time":"2006年8月24日","article":{"first":"第一段","second":"第二段","third":"第三段"}}';t = a.parseJSON();write(t.article.first)//显示 第一段</>