WEB开发之旅—站在山脚下【续 4】

WEB开发之旅—站在山脚下【续 4】

你是否已经注意到这样两个问题:1、类Updata使用了json对象;2、用到了firefoxjavascript调试工具firebug。对于firebug,它的确是个不错的javascript调试工具,若你尚未使用,那请你尽快使用吧;而对于json,尽管我们已经把数据传递到了server端,但那样的一串字符要我们个人去解析绝对不是一个好的主意,所以,我引入了json,通过jsonarray将字符串解析成jsonobject,然后在将其转化为javabean对象,这样一来我们就可以想往常一样解决我们的业务逻辑编码了。

关于json,我下面做一个简要的阐述,仅仅给你一感性上的认识而已……

备注:在上面示例演示调试过程中,遇到了一个令人头痛的问题是js代码可以顺利的通过firefox浏览器,而可能不会通过IE类的浏览器(microsoftie、傲游、世界之窗等),造成该问题的症结是js中的某些注释影响的浏览器对其解析的识别度,对于这个问题,我暂无好的解决方法,若诸位有好的解决方法,望不吝告知,谢过先~~

但大家也知道,js是解释性的语言,为了提高解释效率,尽量减少注释和空行,可这却不太利于代码阅读等,这也就是为何extjs中同时存在ext-all.jsext-all-debug.jsext-core.jsext-core-debuge.js的原因,xx-debug.js便于阅读用于开发阶段,xx.js便于浏览器解析用于发布阶段。

 

 

五、json-lib简介

JSON-lib这个Java类包用于把bean,mapXML转换成JSON并能够把JSON转回成beanDynaBean。转换时,javascriptjava数据类型的对应关系为:

JSON

 

Java

string

<=>

java.lang.String, java.lang.Character, char

number

<=>

java.lang.Number, byte, short, int, long, float, double

true|false

<=>

java.lang.Boolean, boolean

null

<=>

null

function

<=>

net.sf.json.JSONFunction

array

<=>

net.sf.json.JSONArray (object, string, number, boolean, function)

object

<=>

net.sf.json.JSONObject

Json-libjdk1.3jdk1.5两个版本,而且都有依赖的第三方jar,我用的是jdk1.5版,依赖于jakarta commons-lang 2.3jakarta commons-beanutils 1.7.0jakarta commons-collections 3.2 jakarta commons-logging 1.1ezmorph 1.0.4,它们的下载地址分别为:

Json-libhttp://json-lib.sourceforge.net/

EZMorphhttp://ezmorph.sourceforge.net

以下几个都可以在apache的官方网站apache.org的找到,或直接登陆http://commons.apache.org/,或分别登陆:

Collectionshttp://jakarta.apache.org/commons/collections/

Commons-Langhttp://jakarta.apache.org/commons/lang/

Commons-BeanUtilshttp://commons.apache.org/beanutils/

commons-logginghttp://commons.apache.org/logging/

web开发中,json大有取代xml的趋势,关于json的简单应用及其与xml的对比,我们可以直接参考官方网站http://json-lib.sourceforge.net/usage.html

 

 

举例:我把当时做测试的例子贴出来供大家参考,贴出来的目的是给大家一个可能遇到的异常的解决方法:

MyBean:
package twolf.test;
import java.math.BigDecimal;


class MyBean {
private String name="zhangfeng";
private String sex="male";
private BigDecimal age= new BigDecimal(27);
public String getName() {
   return name;
}
public void setName(String name) {
   this.name = name;
}
public String getSex() {
   return sex;
}
public void setSex(String sex) {
   this.sex = sex;
}

public BigDecimal getAge() {
   return age;
}
public void setAge(BigDecimal age) {
   this.age = age;
}
}

TestMain
package twolf.test;
import java.util.HashMap;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


public class TestMain {
public static void main(String[] args) {
   JSONObject jsonObject;
   JSONArray jsonArr;
  
   System.out.println(" .....json from map.... ");  
   Map<String,Object> map = new HashMap<String, Object>();
   map.put( "name", "json" );
   map.put( "bool", Boolean.TRUE );
   map.put( "int", new Integer(1) );
   map.put( "arr", new String[]{"a","b"} );
   map.put( "func", "function(i){ return this.arr[i]; }" );
   
   jsonObject = JSONObject.fromObject( map );
   System.out.println( jsonObject );

   System.out.println(" .....json from bean.... ");
   MyBean bn = new MyBean();
   bn.setName("yun dao");
   jsonObject = JSONObject.fromObject(bn);
   System.out.println( jsonObject );
  
   System.out.println(" .....json to bean.... ");
   String json = "[{name:'zhangfeng',sex:'male',age:27},{name:'zhangfeng',sex:'male',age:27}]";
   jsonArr = JSONArray.fromObject( json );
   System.out.println(jsonArr);
   for(Object obj:jsonArr){
    System.out.println(obj);
    jsonObject = JSONObject.fromObject(obj);
    bn = (MyBean) JSONObject.toBean(jsonObject,MyBean.class);
    System.out.println(bn.getName() + " " +bn.getSex() + " " + bn.getAge());
   }
}
}

 


/*
* 下面的异常解决方法是:将类MyBean声明为pulic类型
* Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethodException: Property 'name' has no getter method
at net.sf.json.JSONObject._fromBean(JSONObject.java:949)
at net.sf.json.JSONObject.fromObject(JSONObject.java:189)
at net.sf.json.JSONObject.fromObject(JSONObject.java:151)
at twolf.test.TestMain.main(TestMain.java:49)
Caused by: java.lang.NoSuchMethodException: Property 'name' has no getter method
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1127)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290)
at net.sf.json.JSONObject._fromBean(JSONObject.java:924)
... 3 more

*/

。。。终于告一段落,可以休息下了,嘿嘿~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值