json学习.docx
- 文档编号:3876444
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:15
- 大小:594.88KB
json学习.docx
《json学习.docx》由会员分享,可在线阅读,更多相关《json学习.docx(15页珍藏版)》请在冰豆网上搜索。
json学习
JSON进阶第一篇在PHP与javascript中使用JSON
一.JSON简介
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。
易于人阅读和编写。
同时也易于机器解析和生成。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。
这些特性使JSON成为理想的数据交换语言。
JSON的详细解释请访问JSON官网,这个网站上有图有真相,建议认真学习下。
另外,JSON在维基百科上的介绍也很详细,可以访问一下。
二.PHP中JSON编码
在PHP中生成JSON字符串是非常容易的,直接使用)函数就可以将PHP数据转换成JSON字符串,此函数原形如下:
string json_encode ( mixed $value )
这个函数可以为任何数据进行转码,除了resource类型。
三.Javascript解析JSON
有二种方法:
一种是直接使用eval()函数。
这种方法最快速。
然而由于eval方法同样可以执行任意的JavaScript代码,因此当数据来源不可靠时则可能产生安全性问题。
比如下面这个例子就会导致页面被重定向:
[html] viewplaincopy
1.
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2.
//www.w3.org/1999/xhtml">
3.
4.
5.
6.
14.
15.
16.
一段使用eval()解释会导致页面被重定向的JSON数据
17.
18.
第二种方法可以防止不安全代码出现——通过浏览器原生支持的JSON.parse(str)方法读取JSON数据,该方法采用解析器验证读入的代码是否真的是JSON代码,这样就提供了较好的安全性。
但是,由于这是用模拟的方式读取,速度上会比eval()慢。
四.JSON实例
下面以一个实例来解释数据是如何被编码成JSON字符串,JSON字符串又是如何在javascript中解析使用的,程序分为json1.php及json1.html。
程序还要引用Smarty、JQuery及JSON库文件。
1.json1.php
[php] viewplaincopy
1.
php
2.// by MoreWindows( )
3.require_once ('../../smarty_libs/Smarty.class.php');
4.$tpl_article_array = array(
5. "001" => array(
6. "title"=>"PHP访问MySql数据库 初级篇",
7. "link"=>"
8. ),
9. "002" => array(
10. "title"=>"PHP访问MySql数据库 中级篇 Smarty技术",
11. "link"=>"
12. ),
13. "003" => array(
14. "title"=>"PHP访问MySql数据库 高级篇 AJAX技术",
15. "link"=>"
16. ),
17.);
18.
19.$tpl_article_json = $tpl_article_array);
20.$tpl = new Smarty();
21.$tpl->assign("article_array", $tpl_article_array);
22.$tpl->assign("article_json", $tpl_article_json);
23.$tpl->display("json1.html");
24.?
>
2.json1.html
[html] viewplaincopy
1.
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2.
//www.w3.org/1999/xhtml">
3.
4.
5.
6.
7.
28.
34.
35.
36.{foreach $article_array as $key=>$value}
37.
38.
{$value['title']}
39.
40.{/foreach}
41.
none;z-index: 100">
42.
43.
运行结果如下(Win7+IE9.0):
当鼠标经过三个标题时,会触发mouseenter事件显示提示语句。
JSON进阶第二篇AJAX方式传递JSON数据
分类:
HTML/javascript/PHP2012-01-1710:
14 2498人阅读 评论(4) 收藏 举报
上一篇《JSON进阶第一篇在PHP与javascript中使用JSON》示范了在PHP和javascript中如何使用JSON类型的数据,本篇将介绍用AJAX方式得到JSON数据从而动态生成标题和提示语句。
这种技术在静态页面向网站后台请求动态数据时比较有效,因为网站首页的访问量比较大,整个页面要静态化处理,但这个页面上的某些数据又要实时更新,这时就可以在静态页面中使用用AJAX来请求后台实时生成的JSON数据。
关于AJAX技术可以参考《PHP访问MySql数据库高级篇AJAX技术》,这里详细介绍如何使用AJAX来传递JSON数据。
本示例程序分为json2.php和json2.html,json2.html上有个按钮,按下后将发送AJAX请求得到json2.php返回的数据。
1.json2.php
[php] viewplaincopy
1.
php
2.// by MoreWindows( )
3.$article_array = array(
4. "count" => 3,
5. array(
6. "id"=>"001",
7. "title"=>"PHP访问MySql数据库 初级篇",
8. "link"=>"
9. ),
10. array(
11. "id"=>"001",
12. "title"=>"PHP访问MySql数据库 中级篇 Smarty技术",
13. "link"=>"
14. ),
15. array(
16. "id"=>"001",
17. "title"=>"PHP访问MySql数据库 高级篇 AJAX技术",
18. "link"=>"
19. ),
20.);
21.$article_json = $article_array);
22.echo $article_json;
23.?
>
2.Json2.html
[html] viewplaincopy
1.
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2.
//www.w3.org/1999/xhtml">
3.
4.
5.
6.
43.
49.
50.
51.
52.
53.
54.
none;z-index: 100">
55.
56.
运行效果如下:
JSON进阶第三篇apache多域名及JSON的跨域问题(JSONP)
本文先介绍如何为apache配置多域名,然后再用JSONP(JSONwithPadding)来解决JSON的跨域问题。
阅读本文之前,推荐先参阅《JSON进阶第二篇AJAX方式传递JSON数据》。
一.apache配置多域名
在apache的conf目录下找到httpd.conf,然后在该文件最后增加如下内容:
#声明使用虚拟主机过滤规则
NameVirtualHost*:
80
#虚拟主机localhost
80> ServerName localhost DocumentRoot"D: \xampp\htdocs\www"
#虚拟主机
80> ServerName DocumentRoot"D: \xampp\htdocs\"
其中第一个是保证原有的localhost还可以继续工作,第二个为新加域名。
然后再修改host文件(在C:
\Windows\System32\drivers\etc\)
增加:
#
注意修改httpd.conf后要重启下apache服务。
将《JSON进阶第二篇AJAX方式传递JSON数据》文中的json2.php拷贝到D:
\xampp\htdocs\目录中再在浏览器中输入网址
运行结果如下:
在浏览器中能看到如上所示的JSON字符串说明已经成功为apache增加了新的域名,接下来就来体验下JSON的跨域名问题。
将json2.html中“$.post("json2.php",{},function(data){”的“json2.php”改成“
用Firefox的Firebug查看点击按钮后AJAX响应的详细过程,可以看到AJAX请求信息已经发送到服务器上了(就是那个127.0.0.1:
80),但因为安全性问题,服务器返回的数据被屏蔽了——这就是大名鼎鼎的跨域问题。
二.JSONP——解决JSON跨域问题
使用JSONP(JSONwithPadding)就可以解决JSON的跨域问题,JSONP的原理可以访问http:
//zh.wikipedia.org/zh-cn/JSONP,简单的说就是利用了
copyright@ 2008-2022 冰点文档网站版权所有
经营许可证编号:鄂ICP备2022015515号-1