手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:json

来自雪候鸟的关于JSON一些提示

风雪之隅的博客现在也越来越被很多人知道了,当然这与他加入了php的开发组也有关系。这不,开始内爆了。

前两天我在纠正关于json_decode的问题时,看了一下在线手册,才发现json_decode有了第四个可选参数,把BIG_INT当成STRING来处理。
当然看json_decode的时候里面的参数介绍的不多。这不,昨天雪候鸟更新了N多博客,里面就介绍了两篇与JSON相关的东西:

1、让Json更懂中文(JSON_UNESCAPED_UNICODE)
2、JsonSerializable接口

其中第1篇就是我说的BIG_INT相关的那些附加参数,他这么说了:

XML/HTML代码
  1. 怎么样, 是不是让大家很开心的改动? 呵呵, 当然, Json在5.4还加入了: JSON_BIGINT_AS_STRING, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES等选项, 如果有兴趣, 大家可以参看: json_encode 

所以,比如让中文输出的时候不要变成\uxxxx这种格式就只需要这样:

PHP代码
  1. <?php  
  2. echo json_encode("中文", JSON_UNESCAPED_UNICODE);  
  3. //"中文"  ,如果没加这个参数,以前输出是:"\u4e2d\u6587"

然后JSONSerialize,则是有点象serialize了,但是只针对数据输出,而不是象serialize可以把整个对象序列化。。有点象这样:

PHP代码
  1. <?php  
  2. class JsonTest implements JsonSerializable {  //看一下这里
  3.     private $a$b;  
  4.   
  5.     public function __construct($a$b) {  
  6.         $this->a = $a;  
  7.         $this->b = $b;  
  8.     }  
  9.   
  10.     public function jsonSerialize() {  //也就是说这里要主动实现
  11.         return $this->a + $this->b;  
  12.     }  
  13. }  
  14.   
  15. echo json_encode(new JsonTest(23, 42));  
  16. ?>  
  17.   
  18. //65  

在使用的时候就可以这样:

PHP代码
  1. <?php  
  2. $data = array(  
  3.     new stdClass();  
  4.     new JsonTest(1,2),  
  5.     new JsonTest(3,4),  
  6.     array(5,6)  
  7. );  
  8. echo json_encode($data);  
  9. ?>  
  10.   
  11. //[{},3,7,[5,6]]  

雪候鸟也说了:最后提醒一下, PHP 5.4还处于开发阶段, 在最终release之前, 这些特性都可能被调整或者更改. 如果大家有任何建议, 也欢迎反馈, 帮助我们使得PHP变得更好.

------
好吧,第一个功能我喜欢,第二个我短时间内还用不到。。。

Tags: 雪候鸟, json

笔记:json_encode和jquery等

一些笔记
1、json_encode与json_decode的。开花石头在村里说,如果json_encode是字符串,那么在解码的时候还是字符串而不是数组,这点与手册上写的不太一样(是指json_decode的第二个参数是true的情况)
    具体我没有测试,我想石头既然能够发出来那么一定是有这种情况发生,因此算是做个笔记

2、jquery。在使用$('.xxx').hover时,如何知道当前hover对象在整个$('.xxx')对象中的索引值。事实上,我早就知道有$('li').index()之类的用法,但真的一次都没有成功过。简单的例子:

JavaScript代码
  1. $('#test li').hover(function(){  
  2. alert( $('#test li').index(this) );  
  3. },function(){  
  4.  //...  
  5. });  

差不多就是这样。了解到索引值是多少后,就可以针对它们做很多事。$("xxx:eq("+index+")").text()等操作都可以操作了。

3、在InfoQ上看到有为PHP用户写的AS简单教程(InfoQ上的PDF下载时为显示404,请使用此链接:http://www.riameeting.com/magazine/pdf/RIAMeetingWeeklyReportNum24.pdf),这个版本是在线的,http://blog.csdn.net/lihe111/archive/2010/01/14/5189572.aspx

4、还是InfoQ,领域驱动设计这本书的简化版,原书我有,只是看infoQ上介绍说,这几章是精选出来的。因此想简单了解的话,确实不错:http://www.infoq.com/resource/minibooks/domain-driven-design-quickly/zh/pdf/dddquickly-chinese-version.pdf

5、对于WEB开发人员来说,dreamweaver和fireworks等是必备工具,如果不是专业的前端人员,d8和f8就足够了。而且很小,只有100M都不到。因为这些不是正版所以我不提供下载地址。

Tags: json, jquery

很妖的实现:以JSon来实现TextBox可选择可输入

这个实现方式有点妖。
原文是用asp.net实现的。我也没有改,因为,json数据的获取在PHP中真是太简单了。拿到数据后json_encode一下就全有了。。

想看的就做个参考吧。我还是觉得妖
     这里只是把主要的代码贴出来,不再进行过多的说明,重要的地方以注释的方式进行说明。

XML/HTML代码
  1.     <div id="pubDiv" style="background-position: #9999FF; font-size:12px; display:none; z-index:0; overflow:auto; position:absolute; border:#EDEDED 0px solid;background:#EDEDED;"></div>  
  2.     <script type="text/javascript" language="javascript">  
  3.       // 注意下面的等号右面,不能是“<%=BuildJson() %>”,因为JSon整体不能是字符串,同时最后也不能加分号:“;”  
  4.         var strJson = <%=BuildJson() %>  
  5.          
  6.         function ShowBdzDiv() {  
  7.             var dept = document.getElementById("<%=ddlDeptEdit.ClientID %>").value;  
  8.             // 构建要下拉选择的内容  
  9.             var strHtml = "<table border=0px cellpadding=0  cellspacing=0 width=120px><tr>";  
  10.             for (var key in strJson[dept]) {  
  11.                 strHtml += "<tr><td onclick=SetBdz()>" + key + "</td></tr>";  
  12.             }  
  13.             strHtml += "</table>";  
  14.             var oBdz = document.getElementById("<%=txtBdz.ClientID %>");  
  15.             var oDiv = document.getElementById("pubDiv");  
  16.             oDiv.innerHTML = strHtml;  
  17.   
  18.             // 设置显示的位置,并显示  
  19.             oDiv.style.top = "99px";  
  20.             oDiv.style.left = "100px";  
  21.             oDiv.style.display = "block";  
  22.   
  23.         }  
  24.         // 当点击选择一个内容时  
  25.         function SetBdz() {  
  26.             var oBdz = document.getElementById("<%=txtBdz.ClientID %>");  
  27.             // 把选择内容设置到TextBox上,并隐藏下拉选择项  
  28.             oBdz.value = event.srcElement.innerText;  
  29.             HiddenDiv();  
  30.         }  
  31.         // 隐藏下拉选择项  
  32.         function HiddenDiv() {  
  33.             var oDiv = document.getElementById("pubDiv");  
  34.             oDiv.style.display = "none";  
  35.         }  
  36.     </script>  
  37. 。。。  
  38. <!--这里只有一点要注意:设置AutoCompleteType="Disabled"-->  
  39. <asp:TextBox ID="txtBdz" AutoCompleteType="Disabled" onfocus="ShowBdzDiv()" runat="server"></asp:TextBox>  

 

这里要说明的是,这里只实现了下拉选择项的点击选择,不能使用键盘操作。

Tags: json

javascipt的{}中逗号带来的困扰

随便javascript 第5版的书出来,JS的写法也就越来越多了,以前定义一个对象,还得写var o = new Object();现在好了,直接var o = {};

可是这样带来的问题不少(其实是IE和FF的兼容性问题)

下面是一个朋友痛苦的经历:

 

XML/HTML代码
  1. 最近把YUI()引入到了现在做的项目当中,感觉做ajax非常顺手   
  2.   
  3. 由于firefox下有firebug这个插件,所以开发的时候都是以ie为准   
  4. 稍微在ie下做些测试,一般都没有问题。   
  5.   
  6. 这次被一个逗号搞得非常辛苦。   
  7.   
  8. var send_email_callback =    
  9. {    
  10.     success:handleSuccess,    
  11.     failure:handleFailure,    
  12. };    
  13. 这段代码在firefox和ie下都不会报错   
  14. firefox运行正常,ie下导致整个脚本失效   
  15.   
  16. 调试都是用alert来调试,但是ie下alert的功能也失效了,无论alert放在文件的那个位置,都不会有弹框出来   
  17. 整个js文件代码长达300行,找的好辛苦。。。   
  18. 正确的应为: var send_email_callback =    
  19. {    
  20.     success:handleSuccess,    
  21.     failure:handleFailure    
  22. }; 唉,一个逗号引发的辛苦啊。。   
  23.   
  24. 这个错误应该是受到php里面array写法的影响   
  25. 经常在定义array时为了给array添加新值方便,一般都是会再加一个逗号。。。   
  26.   
  27. 另外,还有个地方也会导致脚本在ie下失效   
  28. _div_sending.className     = 'mail_sending';   
  29. //_div_sending.class     = 'mail_sending';   
  30. 其中第二行会导致脚本不能运行,也不会报错,同样无论什么地方放一个alert都不会有反应   
  31. 额,以前看一本书上说,给控件加class的值,这样好像会做到多个浏览器兼容。。。faint,或许是我记错了吧。。   
  32. 解决的办法,注释掉,或者用yui自带的添加的class的方法   
  33. 这段代码是几个星期前写的,那个时候还没有看到yui给控件加class的方法   
  34. YAHOO.util.Dom.addClass(_div_sending, 'mail_sending');   
  35. 希望有人可以告诉我,ie下调试js简单的方法   
  36. 额,我的js的水平也太臭了。。。额。。。。  

确实,在"}"前的最后一个","非常害人。在IE下死活会报错,而且FF下面又完全正常。现在我一看报错,就立马检查是否多了这个",",PHP的ARRAY习惯害人啊……总是担心可能会往配置数组里加东西,所以,每行最后都习惯性的加上逗号,现在……不太敢了。

Tags: json, js

Records:912