学用JSON不久,对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的结构:(不包含“"”,“\”和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):
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
>
使用prototype处理JSON:
正在学习使用中……
http://development.finetooth.com/?p=7
http://particletree.com/features/preloading-data-with-ajax-and-json/