- 浏览: 69022 次
- 性别:
- 来自: 浙江
最新评论
-
Edward:
引用7、安装xrdp用于远程连接(添加10.10的源,并把xr ...
独立硬盘分区安装ubuntu 10.04步骤记录 -
1202:
请问ObjectMapper的writevalue方法是线程安 ...
json工具性能比较:json-lib和jackson进行Java对象到json字符串序列化 -
hqu_wxf:
你的折线图怎么画出来的?
json工具性能比较:json-lib和jackson进行Java对象到json字符串序列化 -
hanwesley:
我迁移到maven之后,在Jboss下提示找不到资源文件,连w ...
Maven的resource插件实现类似antx的autoconfig功能 -
hjg1988:
<div class="quote_title ...
json工具性能比较:json-lib和jackson进行Java对象到json字符串序列化
网上查找“java json”,发现大家使用最多的还是json-lib来进行java对象的序列化成json对象和反序列化成java对象的操作。但是之前在网上也看到过一往篇关于json序列化性能比较的文章,不过一下子找不到了,所以没有引用。另外公司同事也做过类似的测试,结果都表明,json-lib的性能不太令人满意,而一个叫jackson的json序列化工具却表现不俗,另外,json-lib对null值的处理让人也感觉比较困惑。
这里,我也对这两个java json工具进行了一次粗略的测试,主要测试从java对象序列化成json字符串的性能。按以下三种方式进行:
因为见过有人在使用jackson时,每次都new 一个ObjectMapper的情况,而在官方教程中看到过这样一段话(can reuse, share globally)http://jackson.codehaus.org/Tutorial:
即ObjectMapper可以重用,所以这里同时进行重用和不重用方式的测试,另外还测试直接使用StringBuffer拼接字符串的方式,以比较json序列化与原始的java方法的性能差异。
这里以不断增加并发线程数,每个线程循环进行1000次序列化,每次进行100次测量,结果取一个线程跑完(即序列化完1000次)的时间平均值的方式测试在多线程并发情况下的性能。
测试的java对象包含了基本类型属性和复杂属性,并且对象具有继承关系。
注:内存使用情况的数据据仅供参考,这个结果并不准确,因为受机器影响比较大,每次测试差异也比较大,不能准确说明问题,但还是可以参考一下。
另外附上测试代码json-test.rar,其中使用了一个同事写的测试工具,叫nanobench.jar的jar包(这个工具会在每次测试前每做一次“预热”,以排除干扰,因为java虚拟机刚开始运行时会比较慢。并在测试前会做机器资源清理工作,以减小每次测试受上次测试的影响,参考源码:http://code.google.com/p/nanobench/source/checkout)。
gson比jackson慢一个数量级,而且gson是对field序列化,不符合java bean惯例对getter序列化.
基于field的侵入性更小,有些东西并全是pojo,比如pojo有一些方法getXXX(),返回的却是属性的计算结果,jackson就很麻烦了。
gson慢有慢的道理,毕竟是基于field的,要重复反射,不像基于method的可以缓存Method。
另外有多少应用在意这快的0.xxx毫秒哪?!对现有系统影响小,api简单才是关键。
一次调用0.xxx毫秒确实不会在意,但是如果你的是接口服务,并且并发量很大的话,就会出现性能瓶颈。
很多接口服务是以json形式暴露,有些接口服务对性能要求还是比较高的。我在公司做过一个项目就是先后用了这两种工具,这个项目并发量很大。用jackson是一方面是因为性能问题,另一方面是因为json-lib的api太不好友好了,并且因为用了一些json-lib自己的对象,程序出现过一些莫名奇妙的错误,而jackson的要易用多了,api也简单。
gson比jackson慢一个数量级,而且gson是对field序列化,不符合java bean惯例对getter序列化.
基于field的侵入性更小,有些东西并全是pojo,比如pojo有一些方法getXXX(),返回的却是属性的计算结果,jackson就很麻烦了。
gson慢有慢的道理,毕竟是基于field的,要重复反射,不像基于method的可以缓存Method。
另外有多少应用在意这快的0.xxx毫秒哪?!对现有系统影响小,api简单才是关键。
我一个java类,就只有
public String id = "ABCD";
public int age = 20;
public Integer age1 = 2000; 属性
//get/set.....
下面测试代码
你得出的结论是:
jackson/json-lib : 2203 毫秒/ 1079毫秒
有些东西还是实际做做才知道真假
不知道ls有没有注意到我的测试里面对jackson其实有两种测试:jackson with cache和jackson without cache,前者才是正确的做法,因为ObjectMapper是线程安全的,后者是为了说明有的情况下,也会出现这样的对jackson错误的实践,而ls上面的使用方法刚好用了后者。
另外不知道为何ls测出的数据会这么大,我同样用了与ls一样的Object,属性也一样,循环次数也一样,结果测出来的时间jackson/json-lib: 64 毫秒/ 250毫秒
另外,这个东西我们公司里用的时候也是因为一次用了json-lib出了问题,然后换成jackson的,所以也是“实际做做才知道的”。另外,ls也应该可以看到上面的json-lib的序列化也太麻烦了。我比较不喜欢它的一个原因是因为它都引入了自己的类型,比如null并不是真正的null,而一个json-lib自己的一个表达Null的对象
我没有做过详细的测试,但做过粗略的测试,两者相差的性能更大
,的确是有这个问题。。。之前确实没有注意到,更正确的做法是要在不同线程中公用,这样测出的性能应该更高。
另外这个ObjectMapper在官方文档上有说明,这个是线程安全的。
这个文章我看过,只是忘了以后一直找不到这个文章了。
这里,我也对这两个java json工具进行了一次粗略的测试,主要测试从java对象序列化成json字符串的性能。按以下三种方式进行:
- 使用jackson,并在每次循环中重用ObjectMapper对象(jackson with cache)
- 使用jackson,并在每次循环中重新生成ObjectMapper对象(jackson without cache)
- 使用json-lib
- 直接使用StringBuffer进行字符串拼接
因为见过有人在使用jackson时,每次都new 一个ObjectMapper的情况,而在官方教程中看到过这样一段话(can reuse, share globally)http://jackson.codehaus.org/Tutorial:
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally User user = mapper.readValue(new File("user.json"), User.class);
即ObjectMapper可以重用,所以这里同时进行重用和不重用方式的测试,另外还测试直接使用StringBuffer拼接字符串的方式,以比较json序列化与原始的java方法的性能差异。
这里以不断增加并发线程数,每个线程循环进行1000次序列化,每次进行100次测量,结果取一个线程跑完(即序列化完1000次)的时间平均值的方式测试在多线程并发情况下的性能。
测量次数 = 100 每个线程循环进行序列化次数 = 1000 平均时间为一个线程跑完时间 = 总时间/测量次数/线程数
测试的java对象包含了基本类型属性和复杂属性,并且对象具有继承关系。
注:内存使用情况的数据据仅供参考,这个结果并不准确,因为受机器影响比较大,每次测试差异也比较大,不能准确说明问题,但还是可以参考一下。
从上面的两个时间性能的图中可以看出,无论是在低并发还是高并发的情况下,时间性能上,jackson使用重用ObjectMapper方式大大优于使用json-lib方式,甚于jackson使用非重用ObjectMapper方式也略优于json-lib方式。另外也可以看出,jackson在重用ObjectMapper的方式下,性能几乎接近于直接使用StringBuffer的append方法拼接了,尤其在高并发的情况下,两者的曲线几乎要重合了。从这里可以看出jackson的性能非常出色。 另外,从两个空间性能的图中得出的结论与时间性能基本相同,但是由于内存的使用量波动较大,每次测量的结果也相差比较大,并不十分准确,但还是可以看出个大概。 此外,还发现一个现象,在低线程数的情况下,只开一个线程的时间性能要比同时开多个线程的时间性能差不少,具体原因还有待分析,不知道是否与双核CPU有关。
另外附上测试代码json-test.rar,其中使用了一个同事写的测试工具,叫nanobench.jar的jar包(这个工具会在每次测试前每做一次“预热”,以排除干扰,因为java虚拟机刚开始运行时会比较慢。并在测试前会做机器资源清理工作,以减小每次测试受上次测试的影响,参考源码:http://code.google.com/p/nanobench/source/checkout)。
评论
31 楼
1202
2011-08-15
请问ObjectMapper的writevalue方法是线程安全的吗,是否可以在整个应用中(多线程等复杂环境)只有一个ObjecMapper实例对象?
30 楼
hqu_wxf
2011-07-14
你的折线图怎么画出来的?
29 楼
hjg1988
2010-10-14
myreligion 写道
quaff 写道
dieslrae 写道
google的gson建议去测试一下
gson比jackson慢一个数量级,而且gson是对field序列化,不符合java bean惯例对getter序列化.
基于field的侵入性更小,有些东西并全是pojo,比如pojo有一些方法getXXX(),返回的却是属性的计算结果,jackson就很麻烦了。
gson慢有慢的道理,毕竟是基于field的,要重复反射,不像基于method的可以缓存Method。
另外有多少应用在意这快的0.xxx毫秒哪?!对现有系统影响小,api简单才是关键。
一次调用0.xxx毫秒确实不会在意,但是如果你的是接口服务,并且并发量很大的话,就会出现性能瓶颈。
很多接口服务是以json形式暴露,有些接口服务对性能要求还是比较高的。我在公司做过一个项目就是先后用了这两种工具,这个项目并发量很大。用jackson是一方面是因为性能问题,另一方面是因为json-lib的api太不好友好了,并且因为用了一些json-lib自己的对象,程序出现过一些莫名奇妙的错误,而jackson的要易用多了,api也简单。
28 楼
myreligion
2010-10-13
quaff 写道
dieslrae 写道
google的gson建议去测试一下
gson比jackson慢一个数量级,而且gson是对field序列化,不符合java bean惯例对getter序列化.
基于field的侵入性更小,有些东西并全是pojo,比如pojo有一些方法getXXX(),返回的却是属性的计算结果,jackson就很麻烦了。
gson慢有慢的道理,毕竟是基于field的,要重复反射,不像基于method的可以缓存Method。
另外有多少应用在意这快的0.xxx毫秒哪?!对现有系统影响小,api简单才是关键。
27 楼
dongwenkai1
2010-10-13
请问楼主
输出结果:
class User{ public Integer id; public String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException { ObjectMapper mapp = new ObjectMapper(); User u = new User(); u.setId(1); u.setName("\"zhangsan"); StringWriter writer1 = new StringWriter(); mapp.writeValue(writer1,"\"zhangsan"); System.out.println(writer1.toString()); StringWriter writer2 = new StringWriter(); mapp.writeValue(writer2,u.getName()); System.out.println(writer2.toString()); StringWriter writer3 = new StringWriter(); mapp.writeValue(writer3,u); System.out.println(writer3.toString()); } }
输出结果:
"\"zhangsan" //为什么不是""zhangsan" "\"zhangsan" {"name":"\"zhangsan","id":1}
26 楼
jindw
2010-08-15
你这个测试工具非常不错啊,冲这点投你一票。
我用你这个工具测试了一下JSEL。还揪出JSEL JSON工具一个多线程的bug ,非常感谢,呵呵。
jackson 的性能确实非常不错。我折腾了一个下午,硬是没能超越,吧JSEL的测试结果补上。
我用你这个工具测试了一下JSEL。还揪出JSEL JSON工具一个多线程的bug ,非常感谢,呵呵。
jackson 的性能确实非常不错。我折腾了一个下午,硬是没能超越,吧JSEL的测试结果补上。
[JSEL] avg: 21.12 ms total: 2,112.45 ms tps: 47.34 running: 100 times in 10 Threads 2010-8-15 22:30:23 com.alisoft.nano.bench.listener.MemoryUsage outputMeasureInfo 信息: memory-usage: [JSEL] 1,319.808 Kb 2010-8-15 22:30:24 com.alisoft.nano.bench.listener.SimpleMeasure outputMeasureInfo 信息: [JSEL(Without Check)] avg: 11.00 ms total: 1,099.92 ms tps: 90.92 running: 100 times in 10 Threads 2010-8-15 22:30:24 com.alisoft.nano.bench.listener.MemoryUsage outputMeasureInfo 信息: memory-usage: [JSEL(Without Check)] 420.296 Kb 2010-8-15 22:30:26 com.alisoft.nano.bench.listener.SimpleMeasure outputMeasureInfo 信息: [jackson(重用ObjectMapper)] avg: 8.35 ms total: 835.41 ms tps: 119.70 running: 100 times in 10 Threads 2010-8-15 22:30:26 com.alisoft.nano.bench.listener.MemoryUsage outputMeasureInfo 信息: memory-usage: [jackson(重用ObjectMapper)] 1,197.456 Kb 2010-8-15 22:30:33 com.alisoft.nano.bench.listener.SimpleMeasure outputMeasureInfo 信息: [jackson(不重用ObjectMapper)] avg: 56.11 ms total: 5,611.23 ms tps: 17.82 running: 100 times in 10 Threads 2010-8-15 22:30:33 com.alisoft.nano.bench.listener.MemoryUsage outputMeasureInfo 信息: memory-usage: [jackson(不重用ObjectMapper)] 4,956.536 Kb
25 楼
hjg1988
2010-08-13
olivechinese 写道
我一个java类,就只有
public String id = "ABCD";
public int age = 20;
public Integer age1 = 2000; 属性
//get/set.....
下面测试代码
JsonUtils里的工具方法 public static String getJson(Object obj) throws Exception{ StringWriter writer = new StringWriter(); try{ ObjectMapper mapper = new ObjectMapper(); mapper.writeValue(writer, obj); writer.close(); return writer.toString(); }catch (Exception ex){ throw ex; }finally { writer.close(); } }
你得出的结论是:
jackson/json-lib : 2203 毫秒/ 1079毫秒
有些东西还是实际做做才知道真假
不知道ls有没有注意到我的测试里面对jackson其实有两种测试:jackson with cache和jackson without cache,前者才是正确的做法,因为ObjectMapper是线程安全的,后者是为了说明有的情况下,也会出现这样的对jackson错误的实践,而ls上面的使用方法刚好用了后者。
另外不知道为何ls测出的数据会这么大,我同样用了与ls一样的Object,属性也一样,循环次数也一样,结果测出来的时间jackson/json-lib: 64 毫秒/ 250毫秒
另外,这个东西我们公司里用的时候也是因为一次用了json-lib出了问题,然后换成jackson的,所以也是“实际做做才知道的”。另外,ls也应该可以看到上面的json-lib的序列化也太麻烦了。我比较不喜欢它的一个原因是因为它都引入了自己的类型,比如null并不是真正的null,而一个json-lib自己的一个表达Null的对象
24 楼
hjg1988
2010-08-13
liliugen 写道
希望楼主 [color=red]再详细测试一下反序列化的性能 [/color]
我没有做过详细的测试,但做过粗略的测试,两者相差的性能更大
23 楼
olivechinese
2010-08-13
<p>我一个java类,就只有 <br>public String id = "ABCD";<br> public int age = 20;<br> public Integer age1 = 2000; 属性<br>//get/set.....</p>
<p> </p>
<p>下面测试代码 </p>
<pre name="code" class="java">JsonUtils里的工具方法
public static String getJson(Object obj) throws Exception{
StringWriter writer = new StringWriter();
try{
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(writer, obj);
writer.close();
return writer.toString();
}catch (Exception ex){
throw ex;
}finally {
writer.close();
}
}
public static String getJsonList(Object obj){
StringBuffer data = new StringBuffer();
if(obj != null){
if(obj instanceof Collection){
if(CollectionUtils.isEmpty((Collection)obj)){
data.append(nullJsons);
}else{
data.append(JSONSerializer.toJSON(obj).toString());
}
}else if(obj instanceof Map){
if(MapUtils.isNotEmpty((Map)obj)){
data.append(LEFTJSONS)
.append(JSONSerializer.toJSON(obj).toString())
.append(RIGHTJSONS);
}else{
data.append(nullJsons);
}
}else{
data.append(LEFTJSONS)
.append(JSONSerializer.toJSON(obj).toString())
.append(RIGHTJSONS);
}
}else{
data.append(nullJsons);
}
return data.toString();
}</pre>
<p> </p>
<pre name="code" class="java">TestJsonObjectJack testJsonObjectJack2 = new TestJsonObjectJack();
Long l = 0L;
for(int i = 0 ; i < 20000; i++){
StopWatch stopWatch2 = new StopWatch();
stopWatch2.start();
JsonUtil.getJson(testJsonObjectJack2);
stopWatch2.stop();
l += stopWatch2.getTime();
}
System.out.println("l = " + l +" 毫秒");</pre>
<p> </p>
<p>看到的 毫秒数 l = 2203 毫秒</p>
<p> </p>
<p>而是用 json-lib如下</p>
<pre name="code" class="java">TestJsonObjectJack testJsonObjectJack2 = new TestJsonObjectJack();
Long l = 0L;
for(int i = 0 ; i < 20000; i++){
StopWatch stopWatch2 = new StopWatch();
stopWatch2.start();
JsonUtil.getJsonList(testJsonObjectJack2);
stopWatch2.stop();
l += stopWatch2.getTime();
}
System.out.println("l = " + l +" 毫秒");</pre>
<p> </p>
<p>看到的 毫秒数 l = 1079 毫秒</p>
<p> </p>
<p>有些东西还是实际做做才知道真假</p>
<p> </p>
<p>下面测试代码 </p>
<pre name="code" class="java">JsonUtils里的工具方法
public static String getJson(Object obj) throws Exception{
StringWriter writer = new StringWriter();
try{
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(writer, obj);
writer.close();
return writer.toString();
}catch (Exception ex){
throw ex;
}finally {
writer.close();
}
}
public static String getJsonList(Object obj){
StringBuffer data = new StringBuffer();
if(obj != null){
if(obj instanceof Collection){
if(CollectionUtils.isEmpty((Collection)obj)){
data.append(nullJsons);
}else{
data.append(JSONSerializer.toJSON(obj).toString());
}
}else if(obj instanceof Map){
if(MapUtils.isNotEmpty((Map)obj)){
data.append(LEFTJSONS)
.append(JSONSerializer.toJSON(obj).toString())
.append(RIGHTJSONS);
}else{
data.append(nullJsons);
}
}else{
data.append(LEFTJSONS)
.append(JSONSerializer.toJSON(obj).toString())
.append(RIGHTJSONS);
}
}else{
data.append(nullJsons);
}
return data.toString();
}</pre>
<p> </p>
<pre name="code" class="java">TestJsonObjectJack testJsonObjectJack2 = new TestJsonObjectJack();
Long l = 0L;
for(int i = 0 ; i < 20000; i++){
StopWatch stopWatch2 = new StopWatch();
stopWatch2.start();
JsonUtil.getJson(testJsonObjectJack2);
stopWatch2.stop();
l += stopWatch2.getTime();
}
System.out.println("l = " + l +" 毫秒");</pre>
<p> </p>
<p>看到的 毫秒数 l = 2203 毫秒</p>
<p> </p>
<p>而是用 json-lib如下</p>
<pre name="code" class="java">TestJsonObjectJack testJsonObjectJack2 = new TestJsonObjectJack();
Long l = 0L;
for(int i = 0 ; i < 20000; i++){
StopWatch stopWatch2 = new StopWatch();
stopWatch2.start();
JsonUtil.getJsonList(testJsonObjectJack2);
stopWatch2.stop();
l += stopWatch2.getTime();
}
System.out.println("l = " + l +" 毫秒");</pre>
<p> </p>
<p>看到的 毫秒数 l = 1079 毫秒</p>
<p> </p>
<p>有些东西还是实际做做才知道真假</p>
22 楼
liliugen
2010-08-13
希望楼主 [color=red]再详细测试一下反序列化的性能 [/color]
21 楼
jelver
2010-07-29
非常不错的文章,目前也关注jackson
20 楼
hjg1988
2010-02-25
linkobe 写道
我觉得你这个例子有点小问题啊,ObjectWrapper是在一个线程里公用的,不是在多个线程间公用的,一般高并发的话应该是要再多个线程间公用吧,那这个时候ObjectWrapper是线程安全的吗
,的确是有这个问题。。。之前确实没有注意到,更正确的做法是要在不同线程中公用,这样测出的性能应该更高。
另外这个ObjectMapper在官方文档上有说明,这个是线程安全的。
19 楼
linkobe
2010-02-24
我觉得你这个例子有点小问题啊,ObjectWrapper是在一个线程里公用的,不是在多个线程间公用的,一般高并发的话应该是要再多个线程间公用吧,那这个时候ObjectWrapper是线程安全的吗
18 楼
intih
2010-01-06
<div class="quote_title">hjg1988 写道</div>
<div class="quote_div">
<div class="quote_title">intih 写道</div>
<div class="quote_div">
<div class="quote_title">hjg1988 写道</div>
<div class="quote_div">
<div class="quote_title">newsky 写道</div>
<div class="quote_div">xstream和stringtree 测试过吗?<br>
</div>
<br>没有测试过,这两个性能如何?好用吗?<br>我主要是因为公司里面用到这两个,并且大部分在用json-lib,所以对这两个进行了测试</div>
<p> </p>
<p>XStream本身并不提供JSON序列化的工具,但是它本身又支持JSON和Java Object之间的转换,是通过Jettison来完成的。</p>
<p> </p>
<p>PS:楼主的图是做好Excel表格以后生产的图表还是用哪个工具直接就生成了的</p>
</div>
<p><img src="/images/smiles/icon_cool.gif" alt="">,我是用Excel做的,有什么好的工具可以推荐吗?</p>
</div>
<p>没有啊,所以正想问你呢,呵呵。<img src="/images/smiles/icon_smile.gif" alt=""></p>
<div class="quote_div">
<div class="quote_title">intih 写道</div>
<div class="quote_div">
<div class="quote_title">hjg1988 写道</div>
<div class="quote_div">
<div class="quote_title">newsky 写道</div>
<div class="quote_div">xstream和stringtree 测试过吗?<br>
</div>
<br>没有测试过,这两个性能如何?好用吗?<br>我主要是因为公司里面用到这两个,并且大部分在用json-lib,所以对这两个进行了测试</div>
<p> </p>
<p>XStream本身并不提供JSON序列化的工具,但是它本身又支持JSON和Java Object之间的转换,是通过Jettison来完成的。</p>
<p> </p>
<p>PS:楼主的图是做好Excel表格以后生产的图表还是用哪个工具直接就生成了的</p>
</div>
<p><img src="/images/smiles/icon_cool.gif" alt="">,我是用Excel做的,有什么好的工具可以推荐吗?</p>
</div>
<p>没有啊,所以正想问你呢,呵呵。<img src="/images/smiles/icon_smile.gif" alt=""></p>
17 楼
hjg1988
2010-01-06
<div class="quote_title">intih 写道</div>
<div class="quote_div">
<div class="quote_title">hjg1988 写道</div>
<div class="quote_div">
<div class="quote_title">newsky 写道</div>
<div class="quote_div">xstream和stringtree 测试过吗?<br>
</div>
<br>没有测试过,这两个性能如何?好用吗?<br>我主要是因为公司里面用到这两个,并且大部分在用json-lib,所以对这两个进行了测试</div>
<p> </p>
<p>XStream本身并不提供JSON序列化的工具,但是它本身又支持JSON和Java Object之间的转换,是通过Jettison来完成的。</p>
<p> </p>
<p>PS:楼主的图是做好Excel表格以后生产的图表还是用哪个工具直接就生成了的</p>
</div>
<p><img src="/images/smiles/icon_cool.gif" alt="">,我是用Excel做的,有什么好的工具可以推荐吗?</p>
<div class="quote_div">
<div class="quote_title">hjg1988 写道</div>
<div class="quote_div">
<div class="quote_title">newsky 写道</div>
<div class="quote_div">xstream和stringtree 测试过吗?<br>
</div>
<br>没有测试过,这两个性能如何?好用吗?<br>我主要是因为公司里面用到这两个,并且大部分在用json-lib,所以对这两个进行了测试</div>
<p> </p>
<p>XStream本身并不提供JSON序列化的工具,但是它本身又支持JSON和Java Object之间的转换,是通过Jettison来完成的。</p>
<p> </p>
<p>PS:楼主的图是做好Excel表格以后生产的图表还是用哪个工具直接就生成了的</p>
</div>
<p><img src="/images/smiles/icon_cool.gif" alt="">,我是用Excel做的,有什么好的工具可以推荐吗?</p>
16 楼
intih
2010-01-06
<div class="quote_title">hjg1988 写道</div>
<div class="quote_div">
<div class="quote_title">newsky 写道</div>
<div class="quote_div">xstream和stringtree 测试过吗?<br>
</div>
<br>没有测试过,这两个性能如何?好用吗?<br>我主要是因为公司里面用到这两个,并且大部分在用json-lib,所以对这两个进行了测试</div>
<p> </p>
<p>XStream本身并不提供JSON序列化的工具,但是它本身又支持JSON和Java Object之间的转换,是通过Jettison来完成的。</p>
<p> </p>
<p>PS:楼主的图是做好Excel表格以后生产的图表还是用哪个工具直接就生成了的</p>
<div class="quote_div">
<div class="quote_title">newsky 写道</div>
<div class="quote_div">xstream和stringtree 测试过吗?<br>
</div>
<br>没有测试过,这两个性能如何?好用吗?<br>我主要是因为公司里面用到这两个,并且大部分在用json-lib,所以对这两个进行了测试</div>
<p> </p>
<p>XStream本身并不提供JSON序列化的工具,但是它本身又支持JSON和Java Object之间的转换,是通过Jettison来完成的。</p>
<p> </p>
<p>PS:楼主的图是做好Excel表格以后生产的图表还是用哪个工具直接就生成了的</p>
15 楼
hjg1988
2010-01-05
dennis_zane 写道
一个更详细的benchmark,详细比较了各种序列化机制的性能
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
这个文章我看过,只是忘了以后一直找不到这个文章了。
14 楼
hjg1988
2010-01-05
<div class="quote_title">ubotutwin 写道</div>
<div class="quote_div">
<p> 再次请教lz,jackson有没有像json-lib一样的xml--json之间直接转换的功能?<img src="/images/smiles/icon_eek.gif" alt=""></p>
</div>
<p>没有用过,对xml--json的转换功能不是很清楚。不过看官方文档上,似乎有关于xml转换上的</p>
<div class="quote_div">
<p> 再次请教lz,jackson有没有像json-lib一样的xml--json之间直接转换的功能?<img src="/images/smiles/icon_eek.gif" alt=""></p>
</div>
<p>没有用过,对xml--json的转换功能不是很清楚。不过看官方文档上,似乎有关于xml转换上的</p>
13 楼
mikewang
2010-01-05
[quote="ubotutwin"]
再次请教lz,jackson有没有像json-lib一样的xml--json之间直接转换的功能?[img]/images/smiles/icon_eek.gif" alt="[/img]
没有, 同时也没有必要存在xml -- json 这样的功能。
再次请教lz,jackson有没有像json-lib一样的xml--json之间直接转换的功能?[img]/images/smiles/icon_eek.gif" alt="[/img]
没有, 同时也没有必要存在xml -- json 这样的功能。
12 楼
ubotutwin
2010-01-05
<p> 再次请教lz,jackson有没有像json-lib一样的xml--json之间直接转换的功能?<img src="/images/smiles/icon_eek.gif" alt=""></p>
发表评论
-
Maven的resource插件实现类似antx的autoconfig功能
2010-04-10 21:22 4750公司里使用antx的autoconfig进行项目配置文 ... -
Velocity不支持宏的递归
2010-03-27 20:44 2919因为velocity只支持对集合的遍历循环,不能使用像whil ... -
三种方案解决Ajax post中文乱码问题的比较(包括不使用escape方法)
2009-09-19 16:05 4864本文参考了http://www.iteye ... -
ajax post请求中文乱码问题解决(不使用escape方法,只使用filter)
2009-09-13 11:15 4380注:本文原创,转载请指明出处。欢迎提出宝贵意见和建议。 本人另 ... -
Luntbuild 使用 Maven2进行持续集成,并输出各种报表
2009-08-15 00:31 1685除了官方文档,网上关于Luntbuild的资料并不 ...
相关推荐
JSON字符串到Java对象的转换通常通过反序列化实现,而Java对象到JSON字符串的转换则称为序列化。 - json-lib库提供了一套API,使得这种转换变得简单。例如,使用`net.sf.json.JSONObject.fromObject()`方法可以将...
3. **JSON到Java对象的反序列化**:反之,它也提供了将JSON字符串转化为Java对象的功能,例如`JSONObject.toBean()`和`JSONArray.toList()`方法,能够将JSON数据映射到Java对象或列表。 4. **XML和JSON之间的转换**...
总结,Java对象转换为JSON字符串或字符串数组是通过引入JSON库,如`json-lib`,然后利用其提供的序列化和反序列化方法实现的。了解并熟练掌握这些方法对于进行Java和JSON之间的数据交换至关重要。在实际项目中,根据...
3. 序列化和反序列化:通过`fromObject()`和`toObject()`方法将Java对象序列化为JSON字符串,或从JSON字符串反序列化回Java对象。 4. 处理复杂结构:对于包含嵌套对象和数组的复杂结构,JSON-lib也能轻松应对,只需...
1. **JSON到Java对象转换**:通过JsonNode、JSONArray和JSONObject等类,json-lib可以解析JSON字符串并生成对应的Java对象。例如,一个JSON对象可以被映射为一个HashMap,而一个JSON数组则可以转换为ArrayList。 2....
- 序列化:将Java对象转换为JSON字符串。例如,一个User类的对象可以通过json-lib转化为JSON格式,便于在网络中传输或存储。 - 反序列化:将JSON字符串还原为Java对象。接收到JSON数据后,可以将其解析成对应的...
1. **JSON序列化与反序列化**:json-lib允许将Java对象转换为JSON字符串,反之亦然。例如,你可以将一个Java的HashMap转换成JSON格式,便于在网络上传输,或者将接收到的JSON字符串解析成Java对象,便于进一步处理。...
这个jar包包含了一系列类和方法,允许开发者方便地将Java对象序列化为JSON字符串,或者从JSON字符串反序列化为Java对象。 在使用`json-lib-2.4 jar`之前,需要将其添加到项目的类路径中。这通常通过在构建工具(如...
2. 将JSON字符串反序列化回对应的Java对象。 3. 提供了多种数据类型转换的API,支持不同数据结构间的转换。 4. 支持XML与JSON之间的转换,方便跨平台数据交互。 5. 兼容多种版本的Java,包括Java SE和Java EE环境。 ...
`json-lib`是一个Java库,它提供了将Java对象转换为JSON格式,以及从JSON字符串反序列化回Java对象的功能。`json-lib-2.3-jdk15`是这个库的一个特定版本,兼容JDK 1.5,这意味着它可以在运行JDK 1.5或更高版本的Java...
Gson是Google提供的一个开源库,它能够将Java对象转换为JSON字符串,同时也能够将JSON数据转换回等效的Java对象。Gson的优点在于其简单易用的API和强大的功能,支持自定义序列化和反序列化的策略。它对于复杂类型的...
3. **反序列化**: 同样,`json-lib`也提供了反序列化功能,可以将JSON字符串转换回Java对象。例如: ```java String jsonString = "{\"name\":\"张三\",\"age\":30}"; Person person = (Person) JSONObject.toBean...
JSON库如`json-lib`则提供了将Java对象转换为JSON格式和从JSON字符串反序列化为Java对象的功能,极大地简化了开发人员的工作。 `json-lib`是一个流行的Java库,用于处理JSON数据。在`json-lib-2.4-jdk15`这个版本中...
总结来说,`json-lib`是Java开发者处理JSON数据的一个强大工具,提供了一整套解决方案,从JSON字符串的解析到Java对象的转换,以及与其他数据格式的交互。这个资源包包含所有必要的依赖,使得开发者能快速集成和使用...
5. **序列化与反序列化**:`JSONObject.fromObject()`和`JSONObject.toObject()`可以实现Java对象到JSON字符串的序列化,以及JSON字符串到Java对象的反序列化。 6. **处理日期和时间**:由于JSON标准不包含日期类型...
1. **对象转换**:可以将Java对象(如ArrayList、HashMap等)直接转换为JSON字符串,也可以将JSON字符串反序列化回Java对象。 2. **XML与JSON转换**:它还支持XML和JSON之间的转换,这在需要在两种格式间切换的场景...
1. **序列化**:将Java对象转换为JSON字符串。例如,一个Java对象可以是一个简单的JavaBean,也可以是List、Map或者其他复杂的数据结构。`json-lib`提供了多种方法,如`net.sf.json.JSONObject.fromObject(Object ...
1. **JSON对象和数组的解析与生成**:`json-lib`提供了一系列API,可以将JSON字符串解析成Java对象,如JSONObject和JSONArray,同时也能将Java对象转换成对应的JSON字符串。 2. **数据类型转换**:`json-lib`支持将...
4. **序列化和反序列化**:用户可以通过`json-lib`将Java对象序列化为JSON字符串,然后在需要的时候反序列化回原来的Java对象。 5. **XML和JSON互转**:`json-lib`还提供了XML到JSON以及JSON到XML的转换功能,使得...