当前位置: 代码迷 >> JavaScript >> json-lib.jar开发包应用
  详细解决方案

json-lib.jar开发包应用

热度:347   发布时间:2012-11-10 10:48:50.0
json-lib.jar开发包使用:
json-lib.jar开发包使用:

依赖包:
commons-beanutils.jar;
commons-httpclient.jar;
commons-lang.jar;
ezmorph.jar;不少人使用时会提示net.sf.ezmorph.xxx找不到,就是缺这个:
morph-1.0.1.jar

相关链接:
http://json-lib.sourceforge.net/
http://ezmorph.sourceforge.net/
http://morph.sourceforge.net/

使用过程中问题:
1,把bean转化为json格式时老提示如下错误:
Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethodException: Property 'name' has no getter method
解决:声明bean为public class xxx,必须是public,我用默认类型(class xxx)都不行

2,Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.lang.ArrayUtils.toObject([C)[Ljava/lang/Character;
原因:定义属性如下:private char[] options = new char[] { 'a', 'f' };好像不能处理这种类型的

3, private String func1 = "function(i){ return this.options[i]; }";
?? 和
?? private JSONFunction func2 = new JSONFunction(new String[] { "i" },
???? "return this.options[i];");
?? 转换后显示结果差不多:
?? {"func1":function(i){ return this.options[i];,"func2":function(i){ return this.options[i]; }}

测试类:
?
  1. import ?java.util.ArrayList;??
  2. import ?java.util.HashMap;??
  3. import ?java.util.List;??
  4. import ?java.util.Map;??
  5. ??
  6. import ?net.sf.json.JSONArray;??
  7. import ?net.sf.json.JSONObject;??
  8. ??
  9. public ? class ?Json?{??
  10. ????public ? static ? void ?main(String[]?args)?{??
  11. ????????Json?j?=?new ?Json();??
  12. ????????j.bean2json();??
  13. ????}??
  14. ??
  15. ????public ? void ?arr2json()?{??
  16. ????????boolean []?boolArray?=? new ? boolean []?{? true ,? false ,? true ?};??
  17. ????????JSONArray?jsonArray?=?JSONArray.fromObject(boolArray);??
  18. ????????System.out.println(jsonArray);??
  19. ????????//?prints?[true,false,true] ??
  20. ????}??
  21. ??
  22. ????public ? void ?list2json()?{??
  23. ????????List <object> ?list?=?<span class="keyword">new</span> <span>?ArrayList <object> ();?? </object> </span> </object>
  24. ????????list.add("first" );??
  25. ????????list.add("second" );??
  26. ????????JSONArray?jsonArray?=?JSONArray.fromObject(list);??
  27. ????????System.out.println(jsonArray);??
  28. ????????//?prints?["first","second"] ??
  29. ????}??
  30. ??
  31. ????public ? void ?createJson()?{??
  32. ????????JSONArray?jsonArray?=?JSONArray.fromObject("['json','is','easy']" );??
  33. ????????System.out.println(jsonArray);??
  34. ????????//?prints?["json","is","easy"] ??
  35. ????}??
  36. ??
  37. ????public ? void ?map2json()?{??
  38. ????????Map
  39. ????????map.put("name" ,? "json" );??
  40. ????????map.put("bool" ,?Boolean.TRUE);??
  41. ????????map.put("int" ,? new ?Integer( 1 ));??
  42. ????????map.put("arr" ,? new ?String[]?{? "a" ,? "b" ?});??
  43. ????????map.put("func" ,? "function(i){?return?this.arr[i];?}" );??
  44. ??
  45. ????????JSONObject?json?=?JSONObject.fromObject(map);??
  46. ????????System.out.println(json);??
  47. ????????//?prints ??
  48. ????????//?["name":"json","bool":true,"int":1,"arr":["a","b"],"func":function(i){ ??
  49. ????????//?return?this.arr[i];?}] ??
  50. ????}??
  51. ??
  52. ????public ? void ?bean2json()?{??
  53. ????????JSONObject?jsonObject?=?JSONObject.fromObject(new ?MyBean());??
  54. ????????System.out.println(jsonObject);??
  55. ????????/* ?
  56. ?????????*?prints? ?
  57. ?????????*?{"func1":function(i){?return?this.options[i]; ?
  58. ?????????*?},"pojoId":1,"name":"json","func2":function(i){?return ?
  59. ?????????*?this.options[i];?}} ?
  60. ?????????*/ ??
  61. ????}??
  62. ??
  63. ????public ? void ?json2bean()?{??
  64. ????????String?json?=?"{name=\"json2\",func1:true,pojoId:1,func2:function(a){?return?a;?},options:['1','2']}" ;??
  65. ????????JSONObject?jb?=?JSONObject.fromString(json);??
  66. ????????JSONObject.toBean(jb,?MyBean.class );??
  67. ????????System.out.println();??
  68. ????}??
  69. }??

操作的bean:
?
  1. import ?net.sf.json.JSONFunction;??
  2. ??
  3. public ? class ?MyBean?{??
  4. ????private ?String?name?=? "json" ;??
  5. ????private ? int ?pojoId?=? 1 ;??
  6. ????//?private?char[]?options?=?new?char[]?{?'a',?'f'?}; ??
  7. ????private ?String?func1?=? "function(i){?return?this.options[i];?}" ;??
  8. ????private ?JSONFunction?func2?=? new ?JSONFunction( new ?String[]?{? "i" ?},??
  9. ????????????"return?this.options[i];" );??
  10. ??
  11. ????//?getters?&?setters ??
  12. ????......??
  13. }??

题外话: 这个我对json-lib包的初次尝试,希望对大家有所帮助,另外大家有谁用过其它处理json的开发包,提出来,大家探讨一下~!!!!
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
  • taobao,赢在淘宝
? ? ? ?
发表时间:2007-08-09
第2点我不会报错
? ? ? ? 回帖地址
0 0
发表时间:2007-12-20
JSON让我觉得有一点不爽,
Java代码 <embed type="application/x-shockwave-flash" width="14" height="15" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=Resources%20resource%3DmanageResourceDao.get(resource.getId())%3B%0AJSONArray%20array%20%3D%20JSONArray.fromObject(resource)%3B%20%2F%2F%E6%AD%A4%E5%A4%84%E5%87%BA%E7%8E%B0%E5%BC%82%E5%B8%B8%0A" quality="high" allowscriptaccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
  1. Resources?resource=manageResourceDao.get(resource.getId());??
  2. JSONArray?array?=?JSONArray.fromObject(resource);?//此处出现异常 ??
Resources resource=manageResourceDao.get(resource.getId());
JSONArray array = JSONArray.fromObject(resource); //此处出现异常

异常如下:
引用
net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
at net.sf.json.JSONObject._fromBean(JSONObject.java:738)
at net.sf.json.JSONObject.fromObject(JSONObject.java:182)


于是我改成
Java代码 <embed type="application/x-shockwave-flash" width="14" height="15" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=Resources%20resource%3DmanageResourceDao.get(resource.getId())%3B%0AResources%20res%3Dnew%20%20Resources()%3B%0ABeanUtils.copyProperties(res%2C%20resource)%3B%0A%09%09%09%0AJSONArray%20array%20%3D%20JSONArray.fromObject(res)%3B" quality="high" allowscriptaccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
  1. Resources?resource=manageResourceDao.get(resource.getId());??
  2. Resources?res=new ??Resources();??
  3. BeanUtils.copyProperties(res,?resource);??
  4. ??????????????
  5. JSONArray?array?=?JSONArray.fromObject(res);??
Resources resource=manageResourceDao.get(resource.getId());
Resources res=new  Resources();
BeanUtils.copyProperties(res, resource);
			
JSONArray array = JSONArray.fromObject(res);


这样才可以了,觉得这样有些不爽,不知道有没更好的办法解决?
? ? ? ? 回帖地址
0 0
发表时间:2008-06-12
我如果体格bean里面包含一个set集合,转换json的时候会报错,应该怎么解决》
? ? ? ? 回帖地址
0 0
发表时间:2008-06-12
我做了个applet打印程序,和服务器通过json通信,觉得json-lib牵连太多,而且通过两次转换后对象数据并没有和原来的一致,所以后来干脆用了系列化,效果还不错。
? ? ? ? 回帖地址
0 0
发表时间:2008-06-13
刚用了JSON-lib,有不少地方不符合我的需求,就直接源码拿来,改了一下
? ? ? ? 回帖地址
0 0
发表时间:2008-06-13
什么时候讲讲和hibernate结合自动生成json的问题 很多帖子力聊着聊着就讨论起这个来了.
还有那些依赖包 确实很头疼,我就是找不到那个 不得已用了个旧的代替
? ? ? ? 回帖地址
0 0
发表时间:2008-06-13
andrew.yulong 写道
我如果体格bean里面包含一个set集合,转换json的时候会报错,应该怎么解决》

改写代码吧?
一般我反而是遇到返回值是set的就不生成json
因为是一对多关系经常不用加载
  相关解决方案