你是否已经注意到这样两个问题:1、类Updata使用了json对象;2、用到了firefox的javascript调试工具firebug。对于firebug,它的确是个不错的javascript调试工具,若你尚未使用,那请你尽快使用吧;而对于json,尽管我们已经把数据传递到了server端,但那样的一串字符要我们个人去解析绝对不是一个好的主意,所以,我引入了json,通过jsonarray将字符串解析成jsonobject,然后在将其转化为javabean对象,这样一来我们就可以想往常一样解决我们的业务逻辑编码了。
关于json,我下面做一个简要的阐述,仅仅给你一感性上的认识而已……
备注:在上面示例演示调试过程中,遇到了一个令人头痛的问题是js代码可以顺利的通过firefox浏览器,而可能不会通过IE类的浏览器(如microsoft的ie、傲游、世界之窗等),造成该问题的症结是js中的某些注释影响的浏览器对其解析的识别度,对于这个问题,我暂无好的解决方法,若诸位有好的解决方法,望不吝告知,谢过先~~
但大家也知道,js是解释性的语言,为了提高解释效率,尽量减少注释和空行,可这却不太利于代码阅读等,这也就是为何extjs中同时存在ext-all.js、ext-all-debug.js、ext-core.js及ext-core-debuge.js的原因,xx-debug.js便于阅读用于开发阶段,xx.js便于浏览器解析用于发布阶段。
五、json-lib简介
JSON-lib这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean或DynaBean。转换时,javascript与java数据类型的对应关系为:
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-lib有jdk1.3和jdk1.5两个版本,而且都有依赖的第三方jar,我用的是jdk1.5版,依赖于jakarta commons-lang 2.3、jakarta commons-beanutils 1.7.0、jakarta commons-collections 3.2、 jakarta commons-logging 1.1及ezmorph 1.0.4,它们的下载地址分别为:
Json-lib:http://json-lib.sourceforge.net/
EZMorph:http://ezmorph.sourceforge.net
以下几个都可以在apache的官方网站apache.org的找到,或直接登陆http://commons.apache.org/,或分别登陆:
Collections:http://jakarta.apache.org/commons/collections/
Commons-Lang:http://jakarta.apache.org/commons/lang/
Commons-BeanUtils:http://commons.apache.org/beanutils/
commons-logging:http://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
*/
。。。终于告一段落,可以休息下了,嘿嘿~~