JSON 即 JavaScript Object Natation ,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。本文将快速讲解 JSON 格式,并通过代码示例演示如何分别在客户端和服务器端进行 JSON 格式数据的处理。
Json 必需的包
commons-httpclient-3.1.jar commons-lang-2.4.jar commons-logging-1.1.1.jar json-lib-2.2.3-jdk13.jar ezmorph-1.0.6.jar commons-collections-3.2.1.jar
以上包可以从
http://commons.apache.org/index.html
http://json-lib.sourceforge.net/
http://ezmorph.sourceforge.net/
http://morph.sourceforge.net/
http://www.docjar.com/
中下载到。
出现 java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher 错误是因为没有导入 ezmorph.jar 文件或版本不对。
出现 java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap 错误是因为没有导入 commons-collections.jar 文件或版本不对。
Java 代码转换成 json 代码
1. List 集合转换成 json 代码
List list = new ArrayList(); list.add( "first" ); list.add( "second" ); JSONArray jsonArray2 = JSONArray.fromObject ( list ); |
2. Map 集合转换成 json 代码
Map map = new HashMap(); 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 json = JSONObject.fromObject (map); |
3. Bean 转换成 json 代码
JSONObject jsonObject = JSONObject.fromObject(new JsonBean()); |
4. 数组转换成 json 代码
boolean [] boolArray = new boolean [] { true , false , true }; JSONArray jsonArray1 = JSONArray.fromObject (boolArray); |
5. 一般数据转换成 json 代码
JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']" ); |
6. beans 转换成 json 代码
List list = new ArrayList(); JsonBean2 jb1 = new JsonBean2(); jb1.setCol(1); jb1.setRow(1); jb1.setValue( "xx" ); JsonBean2 jb2 = new JsonBean2(); jb2.setCol(2); jb2.setRow(2); jb2.setValue( "" ); list.add(jb1); list.add(jb2); JSONArray ja = JSONArray.fromObject (list); |
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
返回顶楼 |
|
|
- xuyao
- 等级: 初级会员
-
- 文章: 255
- 积分: 70
- 来自: 北京
|
效率比较差,在压力比较大的系统,生成json还不如用velocity模板
|
返回顶楼 |
|
|
- 2008shucheng
- 等级: 初级会员
-
- 文章: 3
- 积分: 40
- 来自: 北京
|
xuyao 写道
效率比较差,在压力比较大的系统,生成json还不如用velocity模板
任何技术都有优缺点
对于不同的项目当然要用不同的技术来适应项目的需求
但对于一些中小型的项目还是可以选择JSON的
|
返回顶楼 |
|
|
- 2008shucheng
- 等级: 初级会员
-
- 文章: 3
- 积分: 40
- 来自: 北京
|
JSON真的有这麽差吗?
我使用的时候适合JQuery一起使用的
JSON&JQuery简单易学,中小项目很适合用的。
|
返回顶楼 |
|
|
- yywu
- 等级: 初级会员
-
- 文章: 10
- 积分: 50
- 来自: 广州
|
2008shucheng 写道
我使用的时候适合JQuery一起使用的
JSON&JQuery简单易学,中小项目很适合用的。
你是在同一个页面中引入 json.js 和 jquery.js 吗,
还是用jquery.js 的json 方面的方法或插件 ?
我之前用过jquery.js ,在同一个页面中引入 json.js 和 jquery.js ,,发现报错 :递归太多 。。
把我郁闷了,,你是如何解决的 ?
|
返回顶楼 |
|
|
- hanjs
- 等级: 初级会员
-
- 文章: 111
- 积分: 0
- 来自: 大连
|
看了JSON的处理,对应存在特殊字符比如""的,怎么处理的?
|
返回顶楼 |
|
|
- jindw
- 等级:
-
- 文章: 691
- 积分: 1431
- 来自: 初到北京
|
强烈建议别用JSON.org那个包。
罗嗦的要死,完全与JSON简洁的风格背道而驰。
http://www.iteye.com/topic/260936
|
返回顶楼 |
|
|
- zozoh
- 等级: 初级会员
-
- 文章: 215
- 积分: 60
- 来自: 北京
|
hanjs 写道
看了JSON的处理,对应存在特殊字符比如""的,怎么处理的?
用 \ 转义
关于 JSON 的Java库,
Nutz 的 Json 解析器就非常好:
Java转换成Json:
Java代码 <embed type="application/x-shockwave-flash" width="14" height="15" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=Map%3CString%2CObject%3E%20map%20%3D%20new%20HashMap%3CString%2C%20Object%3E()%3B%0Amap.put(%22name%22%2C%20%22Peter%22)%3B%0Amap.put(%22age%22%2C%2021)%3B%0Amap.put(%22friends%22%2C%20null)%3B%0AString%20result%20%3D%20Json.toJson(map)%3B%0A" quality="high" allowscriptaccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
- Map<String,Object> map = new HashMap<String, Object>();
- map.put("name" , "Peter" );
- map.put("age" , 21 );
- map.put("friends" , null );
- String result = Json.toJson(map);
Map<String,Object> map = new HashMap<String, Object>();
map.put("name", "Peter");
map.put("age", 21);
map.put("friends", null);
String result = Json.toJson(map);
这个时候会输出成:
Json代码 <embed type="application/x-shockwave-flash" width="14" height="15" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%7B%0A%20%20age%20%3A21%2C%0A%20%20name%20%3A%22Peter%22%0A%7D%0A" quality="high" allowscriptaccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
- {
- age :21 ,
- name :"Peter"
- }
{
age :21,
name :"Peter"
}
会自动忽略掉值为空的字段.
Json转换成Java:
Java代码 <embed type="application/x-shockwave-flash" width="14" height="15" src="http://www.iteye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=String%20json%20%3D%20%22%7Bage%20%3A21%2Cname%20%3A%5C%22Peter%5C%22%7D%22%3B%0Amap%20%3D%20Json.fromJson(HashMap.class%2C%20Lang.inr(json))%3B%0A" quality="high" allowscriptaccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
- String json = "{age :21,name :\"Peter\"}" ;
- map = Json.fromJson(HashMap.class , Lang.inr(json));
String json = "{age :21,name :\"Peter\"}";
map = Json.fromJson(HashMap.class, Lang.inr(json));
可以支持行注释,块注释, Json.fromJson(Class<T> type, Reader) 可以直接生成一个 Java 对象
详细的可以参见它的一个简单的手册:
http://code.google.com/p/nutz/downloads/detail?name=Nutz_Json_Book.pdf
|
返回顶楼 |
|
|
- bigant
- 等级: 初级会员
-
- 文章: 1
- 积分: 30
- 来自: 北京
|
2008shucheng 写道
JSON真的有这麽差吗?
我使用的时候适合JQuery一起使用的
JSON&JQuery简单易学,中小项目很适合用的。
搞笑,Google的数据传递都是用JSON的
|
返回顶楼 |
|
|
- ffychina
- 等级: 初级会员
-
- 文章: 1
- 积分: 60
- 来自: 广州
|
依我之见json的处理性能完全超越xml,无论是java还是browser都比xml要快得多,而且表达的内容比xml还要丰富,我现在除了配置文件用xml之外,其他都改用json做中间数据传送了。
你这讲得也太基础了,怎么配置jsonconfig一点都么提。。。
| 返回顶楼 |
| |
- mikeandmore
- 等级: 初级会员
-
- 文章: 446
- 积分: 30
- 来自: 杭州
|
2008shucheng 写道
xuyao 写道
效率比较差,在压力比较大的系统,生成json还不如用velocity模板
任何技术都有优缺点
对于不同的项目当然要用不同的技术来适应项目的需求
但对于一些中小型的项目还是可以选择JSON的
因为不是online serialize。所以内存压力大。
是你程序磋,不关json的事情。
| 返回顶楼 |
| |
- alosin
- 等级: 初级会员
-
- 文章: 7
- 积分: 0
- 来自: 重庆
|
对于jsonplugin传递struts2 action中的List属性,在JavaScript中怎么解析,反馈回的数据是数组
|
|