asfman
android developer
posts - 90,  comments - 213,  trackbacks - 0

学用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"

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 >

使用prototype处理JSON:

正在学习使用中……
http://development.finetooth.com/?p=7
http://particletree.com/features/preloading-data-with-ajax-and-json/

posted on 2006-11-15 13:03 汪杰 阅读(507) 评论(0)  编辑 收藏 引用 所属分类: javascript
只有注册用户登录后才能发表评论。

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(15)

随笔分类(1)

随笔档案(90)

文章分类(727)

文章档案(712)

相册

收藏夹

http://blog.csdn.net/prodigynonsense

友情链接

最新随笔

搜索

  •  

积分与排名

  • 积分 - 467490
  • 排名 - 6

最新随笔

最新评论

阅读排行榜

评论排行榜