- 浏览: 271366 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lwb314:
String相加不支持啊
阿里巴巴开源项目SimpleEL发布0.1版本 -
lwb314:
if后边连续接多个else if 好像不支持
阿里巴巴开源项目SimpleEL发布0.1版本 -
lwb314:
之前的文档都已经不能下载了,请问一下。我如果希望同时执行如下代 ...
阿里巴巴开源项目SimpleEL发布0.1版本 -
loowii:
为什么“http://code.alibabatech.com ...
阿里巴巴开源平台新增项目Druid -
DarrenD:
不错 并发很基础的介绍
新写了一个Java并发程序设计教程
fastjson发布1.1.22版本
Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。
Bug
-某些场景下反序列化Set<String>出错
Improvement
-序列化支持Clob对象
New Feature
-序列化和反序列化支持Calendar
下载
你可以从以下地址中下载fastjson:
Maven中央仓库 http://repo1.maven.org/maven2/com/alibaba/fastjson/
Alibaba OpenSesame开源平台 http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/
Maven
配置pom.xml文件,在dependencies中加入:
源码
https://github.com/AlibabaTech/fastjson
谢谢及时回复。期待有这个功能。
希望你反馈给我,在github上创建一个issue,或者直接联系我。
Bug
-某些场景下反序列化Set<String>出错
Improvement
-序列化支持Clob对象
New Feature
-序列化和反序列化支持Calendar
下载
你可以从以下地址中下载fastjson:
Maven中央仓库 http://repo1.maven.org/maven2/com/alibaba/fastjson/
Alibaba OpenSesame开源平台 http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/
Maven
配置pom.xml文件,在dependencies中加入:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.22</version> </dependency>
源码
https://github.com/AlibabaTech/fastjson
评论
25 楼
vipcxj
2015-10-22
1.2.7版本
出现栈溢出错误~
估计是没有检测到循环引用,于是无限递归下去了。用例就是最默认的配置,没有开启什么关闭循环引用特征。其实就是因为听说这个默认支持循环引用,所以才放弃坑爹的jackson,转而用这个,结果这个直接就堆栈溢出了,好生失望~
出现栈溢出错误~
估计是没有检测到循环引用,于是无限递归下去了。用例就是最默认的配置,没有开启什么关闭循环引用特征。其实就是因为听说这个默认支持循环引用,所以才放弃坑爹的jackson,转而用这个,结果这个直接就堆栈溢出了,好生失望~
24 楼
ccvcd
2014-03-17
是否可以考虑增加以下新功能
以前系统使用json-lib包,现在想使用fastjson包,在做调整时,发现fastjson还是有点不适应,fastjson是否可以考虑增加以下新功能
1.对流属性的支持
流属性经过处理,变成字符串信息进行输出,这样就需要对特定属性的类型进行序列化和反序列化定制
public class Person {
private String name;
private InputStream image;
protected String getName() {
return name;
}
protected void setName(String name) {
this.name = name;
}
protected InputStream getImage() {
return image;
}
protected void setImage(InputStream image) {
this.image = image;
}
}
经过序列化后,希望的结果:
{name:"zhangsan",image:"base64:xsssswww"}
2.反序列化时,可以根据属性名称来指定类型。
为了兼容老系统,对于List Map 的属性,没有使用泛型,这样就需要在反序列化时来指定具体的类型。
public class JsonStroe {
private List rec;
public void setRec(List items) {
this.rec = items;
}
public List getRec() {
return rec;
}
}
public class KeyValue {
private String key;
private String value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
输入值:{rec:[{key:"f",value:"f"}]}
希望可以指定 rec:KeyValue.class 这样,反序列化rec属性内容自动变成KeyValue的类型,如果在定义rec属性时,使用泛型,fastjson可以把rec属性内容自动变成KeyValue的类型,这样就需要改原有的业务代码。
以上问题还请温少给个建议。
以前系统使用json-lib包,现在想使用fastjson包,在做调整时,发现fastjson还是有点不适应,fastjson是否可以考虑增加以下新功能
1.对流属性的支持
流属性经过处理,变成字符串信息进行输出,这样就需要对特定属性的类型进行序列化和反序列化定制
public class Person {
private String name;
private InputStream image;
protected String getName() {
return name;
}
protected void setName(String name) {
this.name = name;
}
protected InputStream getImage() {
return image;
}
protected void setImage(InputStream image) {
this.image = image;
}
}
经过序列化后,希望的结果:
{name:"zhangsan",image:"base64:xsssswww"}
2.反序列化时,可以根据属性名称来指定类型。
为了兼容老系统,对于List Map 的属性,没有使用泛型,这样就需要在反序列化时来指定具体的类型。
public class JsonStroe {
private List rec;
public void setRec(List items) {
this.rec = items;
}
public List getRec() {
return rec;
}
}
public class KeyValue {
private String key;
private String value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
输入值:{rec:[{key:"f",value:"f"}]}
希望可以指定 rec:KeyValue.class 这样,反序列化rec属性内容自动变成KeyValue的类型,如果在定义rec属性时,使用泛型,fastjson可以把rec属性内容自动变成KeyValue的类型,这样就需要改原有的业务代码。
以上问题还请温少给个建议。
23 楼
yunhaifeiwu
2012-10-10
wenshao 写道
目前还不支持
谢谢及时回复。期待有这个功能。
22 楼
yunhaifeiwu
2012-10-10
补充使用场景: 常常 在某个类中,使用了第三方的组件。序列化通常是成功的,可反序列化时,由于该组件的构造函数不支持而失败。 当然解决办法是,另写专门序列化的类。这工作量很大。如果fastjson 在反序列化时,能加入值过滤,属性过滤器什么的,能减轻工作量。
21 楼
wenshao
2012-10-10
目前还不支持
20 楼
yunhaifeiwu
2012-10-10
请问:在序列问时,使用了值过滤器 更改了值类型,在反序列化,即解析JSON文本时,如何还原?
例:
下面是测试代码
我想要的是 ,需要把 JSON.parse(s) 还原成User 的实例。问题没发现,
可以在解析时,插入一个与ValueFilter 相反的自定义函数,当遇到Icon属性且是字符串时,new ImageIcon(iconFileString).
例:
public class User implements Serializable { private String userid; private String username; private ImageIcon icon; //省略getter and setter }
下面是测试代码
public static void main(String[] args) { User u=new User("zhang"); u.setUsername("张三"); UserDetail ud=new UserDetail(); ud.setAddress("中国"); ImageIcon icn=new ImageIcon("1.jpg"); u.setIcon(icn); SerializeWriter out = new SerializeWriter(); JSONSerializer serializer = new JSONSerializer(out); ValueFilter filter = new ValueFilter() {//该过滤器,让value的ImageIcon值变成了 表达文件地址的字符串值。 public Object process(Object source, String name, Object value) { if (name.equals("icon")) { ImageIcon i= (ImageIcon) value; return i.getDescription(); } return value; } }; String s=JSON.toJSONString(u, filter,SerializerFeature.PrettyFormat, SerializerFeature.WriteClassName); System.out.println(s); System.out.println(); }
我想要的是 ,需要把 JSON.parse(s) 还原成User 的实例。问题没发现,
可以在解析时,插入一个与ValueFilter 相反的自定义函数,当遇到Icon属性且是字符串时,new ImageIcon(iconFileString).
19 楼
beming
2012-08-23
请问是不是不支持List的SerializeConfig,指定的mapping属性??
18 楼
beming
2012-08-23
请问这个应该怎么用的呢?
beming 写道
1.1.23版本
public static SerializeConfig mapping = new SerializeConfig();
import java.io.Serializable; import com.alibaba.fastjson.annotation.JSONField; public class JsonModel implements Serializable { private static final long serialVersionUID = 4859971648047607860L; private String kh; private String yl; @JSONField(name = "KH") public String getKh() { return kh; } @JSONField(name = "KH") public void setKh(String kh) { this.kh = kh; } @JSONField(name = "YL") public String getYl() { return yl; } @JSONField(name = "YL") public void setYl(String yl) { this.yl = yl; } }
public static SerializeConfig mapping = new SerializeConfig();
List<Map<String, Object>> list = ...;//从数据库中查询,返回的内容 //((KH=1,YL=0,XZ=XXX,DX=XXX),(KH=2,YL=0,XZ=XXX,DX=XXX)...) mapping = new SerializeConfig(); Map<String, String> tmap = new HashMap<String, String>(); tmap.put("KH", "KH"); tmap.put("YL", "YL"); //定义只是返回KH和YL两个变量的JSON: mapping.put(JsonModel.class, new JavaBeanSerializer(JsonModel.class, tmap)); String rstStr = JSON.toJSONString(list, mapping); 发现循环到一定数量,会将XZ的也会输出来,循环一定数量又将XZ输出来……应该是个bug,明天我确认一下。
17 楼
beming
2012-08-22
1.1.23版本
public static SerializeConfig mapping = new SerializeConfig();
import java.io.Serializable; import com.alibaba.fastjson.annotation.JSONField; public class JsonModel implements Serializable { private static final long serialVersionUID = 4859971648047607860L; private String kh; private String yl; @JSONField(name = "KH") public String getKh() { return kh; } @JSONField(name = "KH") public void setKh(String kh) { this.kh = kh; } @JSONField(name = "YL") public String getYl() { return yl; } @JSONField(name = "YL") public void setYl(String yl) { this.yl = yl; } }
public static SerializeConfig mapping = new SerializeConfig();
List<Map<String, Object>> list = ...;//从数据库中查询,返回的内容 //((KH=1,YL=0,XZ=XXX,DX=XXX),(KH=2,YL=0,XZ=XXX,DX=XXX)...) mapping = new SerializeConfig(); Map<String, String> tmap = new HashMap<String, String>(); tmap.put("KH", "KH"); tmap.put("YL", "YL"); //定义只是返回KH和YL两个变量的JSON: mapping.put(JsonModel.class, new JavaBeanSerializer(JsonModel.class, tmap)); String rstStr = JSON.toJSONString(list, mapping); 发现循环到一定数量,会将XZ的也会输出来,循环一定数量又将XZ输出来……应该是个bug,明天我确认一下。
16 楼
wenshao
2012-08-20
fastjson 1.1.6之后加上了循环引用检测的功能,这会影响序列化的性能,如果你的对象确保没有循环应用,可以加上这个特定,会提升性能:DisableCircularReferenceDetect
wenshao 写道
希望你提供testcase,让我了解慢的原因,同时建议你使用fastjson 1.1.23版本做测试。
白色毒药 写道
我其实并不在意“他们的”测试。我认为关键是对象的多样性,而非书写测试的复杂度。
就我们实际项目中的测试结果来看:
简单对象的序列化,FJ确实比Jackson快
但是相对复杂的对象,数十个字段,有时候是对象中有引用的子对象的情况,Jackson 比 FJ 快 1-2倍
所以我问的你‘测试的例子’,其实想知道你在实际项目中对比测试的对象的类型情况。
从目前的测试结果来看,对于我来说,对前端返回的对象会比较简单,适合FJ。而后端序列化的比较复杂,FJ并不合适。
就我们实际项目中的测试结果来看:
简单对象的序列化,FJ确实比Jackson快
但是相对复杂的对象,数十个字段,有时候是对象中有引用的子对象的情况,Jackson 比 FJ 快 1-2倍
所以我问的你‘测试的例子’,其实想知道你在实际项目中对比测试的对象的类型情况。
从目前的测试结果来看,对于我来说,对前端返回的对象会比较简单,适合FJ。而后端序列化的比较复杂,FJ并不合适。
wenshao 写道
当然充分测试过,我猜测是你测试的问题。
这里是各种java序列化的性能对比,其中jackson的作者Tatu也参与其中的。
https://github.com/eishay/jvm-serializers/wiki/Staging-Results
这里是他们的测试代码:https://github.com/eishay/jvm-serializers
这里有我测试用的testcase :https://github.com/AlibabaTech/fastjson/blob/master/src/test/java/com/alibaba/json/test/benchmark/BenchmarkTest.java
你也可以去看他们讨论组:https://groups.google.com/group/java-serialization-benchmarking。
这里是各种java序列化的性能对比,其中jackson的作者Tatu也参与其中的。
https://github.com/eishay/jvm-serializers/wiki/Staging-Results
这里是他们的测试代码:https://github.com/eishay/jvm-serializers
这里有我测试用的testcase :https://github.com/AlibabaTech/fastjson/blob/master/src/test/java/com/alibaba/json/test/benchmark/BenchmarkTest.java
你也可以去看他们讨论组:https://groups.google.com/group/java-serialization-benchmarking。
白色毒药 写道
好像没快。你能把你自己写的测试比较代码贴出来看看么
白色毒药 写道
1. 确实快了点,原因是?
2. 就算这样,也还是比jackson的ObjectMapper方式慢的多.你自己真的在实际系统中充分测试过么?
新的测试:
3006 -- fj
700 -- jackson
2. 就算这样,也还是比jackson的ObjectMapper方式慢的多.你自己真的在实际系统中充分测试过么?
新的测试:
def mapping = new SerializeConfig() JSON.toJSONStringZ(new PlayerExtraBag(), mapping) long now = System.currentTimeMillis() 10000.times { JSON.toJSONStringZ(player, mapping) } println(System.currentTimeMillis() - now) def reader = new ObjectMapper() now = System.currentTimeMillis() 10000.times { reader.writeValueAsString(player) } println(System.currentTimeMillis() - now)
3006 -- fj
700 -- jackson
wenshao 写道
排除掉第一次调用,重新测试!
白色毒药 写道
关于速度快有点大言不惭啊
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
output :
2206
1210
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
long now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { JSON.toJSONStringZ(player, mapping, SerializerFeature.WriteMapNullValue, SerializerFeature.SortField); } System.out.println(System.currentTimeMillis() - now); now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { new JSONObject(player).toString(); } System.out.println(System.currentTimeMillis() - now);
output :
2206
1210
15 楼
wenshao
2012-08-20
希望你提供testcase,让我了解慢的原因,同时建议你使用fastjson 1.1.23版本做测试。
白色毒药 写道
我其实并不在意“他们的”测试。我认为关键是对象的多样性,而非书写测试的复杂度。
就我们实际项目中的测试结果来看:
简单对象的序列化,FJ确实比Jackson快
但是相对复杂的对象,数十个字段,有时候是对象中有引用的子对象的情况,Jackson 比 FJ 快 1-2倍
所以我问的你‘测试的例子’,其实想知道你在实际项目中对比测试的对象的类型情况。
从目前的测试结果来看,对于我来说,对前端返回的对象会比较简单,适合FJ。而后端序列化的比较复杂,FJ并不合适。
就我们实际项目中的测试结果来看:
简单对象的序列化,FJ确实比Jackson快
但是相对复杂的对象,数十个字段,有时候是对象中有引用的子对象的情况,Jackson 比 FJ 快 1-2倍
所以我问的你‘测试的例子’,其实想知道你在实际项目中对比测试的对象的类型情况。
从目前的测试结果来看,对于我来说,对前端返回的对象会比较简单,适合FJ。而后端序列化的比较复杂,FJ并不合适。
wenshao 写道
当然充分测试过,我猜测是你测试的问题。
这里是各种java序列化的性能对比,其中jackson的作者Tatu也参与其中的。
https://github.com/eishay/jvm-serializers/wiki/Staging-Results
这里是他们的测试代码:https://github.com/eishay/jvm-serializers
这里有我测试用的testcase :https://github.com/AlibabaTech/fastjson/blob/master/src/test/java/com/alibaba/json/test/benchmark/BenchmarkTest.java
你也可以去看他们讨论组:https://groups.google.com/group/java-serialization-benchmarking。
这里是各种java序列化的性能对比,其中jackson的作者Tatu也参与其中的。
https://github.com/eishay/jvm-serializers/wiki/Staging-Results
这里是他们的测试代码:https://github.com/eishay/jvm-serializers
这里有我测试用的testcase :https://github.com/AlibabaTech/fastjson/blob/master/src/test/java/com/alibaba/json/test/benchmark/BenchmarkTest.java
你也可以去看他们讨论组:https://groups.google.com/group/java-serialization-benchmarking。
白色毒药 写道
好像没快。你能把你自己写的测试比较代码贴出来看看么
白色毒药 写道
1. 确实快了点,原因是?
2. 就算这样,也还是比jackson的ObjectMapper方式慢的多.你自己真的在实际系统中充分测试过么?
新的测试:
3006 -- fj
700 -- jackson
2. 就算这样,也还是比jackson的ObjectMapper方式慢的多.你自己真的在实际系统中充分测试过么?
新的测试:
def mapping = new SerializeConfig() JSON.toJSONStringZ(new PlayerExtraBag(), mapping) long now = System.currentTimeMillis() 10000.times { JSON.toJSONStringZ(player, mapping) } println(System.currentTimeMillis() - now) def reader = new ObjectMapper() now = System.currentTimeMillis() 10000.times { reader.writeValueAsString(player) } println(System.currentTimeMillis() - now)
3006 -- fj
700 -- jackson
wenshao 写道
排除掉第一次调用,重新测试!
白色毒药 写道
关于速度快有点大言不惭啊
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
output :
2206
1210
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
long now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { JSON.toJSONStringZ(player, mapping, SerializerFeature.WriteMapNullValue, SerializerFeature.SortField); } System.out.println(System.currentTimeMillis() - now); now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { new JSONObject(player).toString(); } System.out.println(System.currentTimeMillis() - now);
output :
2206
1210
14 楼
白色毒药
2012-08-20
我其实并不在意“他们的”测试。我认为关键是对象的多样性,而非书写测试的复杂度。
就我们实际项目中的测试结果来看:
简单对象的序列化,FJ确实比Jackson快
但是相对复杂的对象,数十个字段,有时候是对象中有引用的子对象的情况,Jackson 比 FJ 快 1-2倍
所以我问的你‘测试的例子’,其实想知道你在实际项目中对比测试的对象的类型情况。
从目前的测试结果来看,对于我来说,对前端返回的对象会比较简单,适合FJ。而后端序列化的比较复杂,FJ并不合适。
就我们实际项目中的测试结果来看:
简单对象的序列化,FJ确实比Jackson快
但是相对复杂的对象,数十个字段,有时候是对象中有引用的子对象的情况,Jackson 比 FJ 快 1-2倍
所以我问的你‘测试的例子’,其实想知道你在实际项目中对比测试的对象的类型情况。
从目前的测试结果来看,对于我来说,对前端返回的对象会比较简单,适合FJ。而后端序列化的比较复杂,FJ并不合适。
wenshao 写道
当然充分测试过,我猜测是你测试的问题。
这里是各种java序列化的性能对比,其中jackson的作者Tatu也参与其中的。
https://github.com/eishay/jvm-serializers/wiki/Staging-Results
这里是他们的测试代码:https://github.com/eishay/jvm-serializers
这里有我测试用的testcase :https://github.com/AlibabaTech/fastjson/blob/master/src/test/java/com/alibaba/json/test/benchmark/BenchmarkTest.java
你也可以去看他们讨论组:https://groups.google.com/group/java-serialization-benchmarking。
这里是各种java序列化的性能对比,其中jackson的作者Tatu也参与其中的。
https://github.com/eishay/jvm-serializers/wiki/Staging-Results
这里是他们的测试代码:https://github.com/eishay/jvm-serializers
这里有我测试用的testcase :https://github.com/AlibabaTech/fastjson/blob/master/src/test/java/com/alibaba/json/test/benchmark/BenchmarkTest.java
你也可以去看他们讨论组:https://groups.google.com/group/java-serialization-benchmarking。
白色毒药 写道
好像没快。你能把你自己写的测试比较代码贴出来看看么
白色毒药 写道
1. 确实快了点,原因是?
2. 就算这样,也还是比jackson的ObjectMapper方式慢的多.你自己真的在实际系统中充分测试过么?
新的测试:
3006 -- fj
700 -- jackson
2. 就算这样,也还是比jackson的ObjectMapper方式慢的多.你自己真的在实际系统中充分测试过么?
新的测试:
def mapping = new SerializeConfig() JSON.toJSONStringZ(new PlayerExtraBag(), mapping) long now = System.currentTimeMillis() 10000.times { JSON.toJSONStringZ(player, mapping) } println(System.currentTimeMillis() - now) def reader = new ObjectMapper() now = System.currentTimeMillis() 10000.times { reader.writeValueAsString(player) } println(System.currentTimeMillis() - now)
3006 -- fj
700 -- jackson
wenshao 写道
排除掉第一次调用,重新测试!
白色毒药 写道
关于速度快有点大言不惭啊
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
output :
2206
1210
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
long now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { JSON.toJSONStringZ(player, mapping, SerializerFeature.WriteMapNullValue, SerializerFeature.SortField); } System.out.println(System.currentTimeMillis() - now); now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { new JSONObject(player).toString(); } System.out.println(System.currentTimeMillis() - now);
output :
2206
1210
13 楼
wenshao
2012-08-19
当然充分测试过,我猜测是你测试的问题。
这里是各种java序列化的性能对比,其中jackson的作者Tatu也参与其中的。
https://github.com/eishay/jvm-serializers/wiki/Staging-Results
这里是他们的测试代码:https://github.com/eishay/jvm-serializers
这里有我测试用的testcase :https://github.com/AlibabaTech/fastjson/blob/master/src/test/java/com/alibaba/json/test/benchmark/BenchmarkTest.java
你也可以去看他们讨论组:https://groups.google.com/group/java-serialization-benchmarking。
这里是各种java序列化的性能对比,其中jackson的作者Tatu也参与其中的。
https://github.com/eishay/jvm-serializers/wiki/Staging-Results
这里是他们的测试代码:https://github.com/eishay/jvm-serializers
这里有我测试用的testcase :https://github.com/AlibabaTech/fastjson/blob/master/src/test/java/com/alibaba/json/test/benchmark/BenchmarkTest.java
你也可以去看他们讨论组:https://groups.google.com/group/java-serialization-benchmarking。
白色毒药 写道
好像没快。你能把你自己写的测试比较代码贴出来看看么
白色毒药 写道
1. 确实快了点,原因是?
2. 就算这样,也还是比jackson的ObjectMapper方式慢的多.你自己真的在实际系统中充分测试过么?
新的测试:
3006 -- fj
700 -- jackson
2. 就算这样,也还是比jackson的ObjectMapper方式慢的多.你自己真的在实际系统中充分测试过么?
新的测试:
def mapping = new SerializeConfig() JSON.toJSONStringZ(new PlayerExtraBag(), mapping) long now = System.currentTimeMillis() 10000.times { JSON.toJSONStringZ(player, mapping) } println(System.currentTimeMillis() - now) def reader = new ObjectMapper() now = System.currentTimeMillis() 10000.times { reader.writeValueAsString(player) } println(System.currentTimeMillis() - now)
3006 -- fj
700 -- jackson
wenshao 写道
排除掉第一次调用,重新测试!
白色毒药 写道
关于速度快有点大言不惭啊
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
output :
2206
1210
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
long now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { JSON.toJSONStringZ(player, mapping, SerializerFeature.WriteMapNullValue, SerializerFeature.SortField); } System.out.println(System.currentTimeMillis() - now); now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { new JSONObject(player).toString(); } System.out.println(System.currentTimeMillis() - now);
output :
2206
1210
12 楼
白色毒药
2012-08-19
好像没快。你能把你自己写的测试比较代码贴出来看看么
白色毒药 写道
1. 确实快了点,原因是?
2. 就算这样,也还是比jackson的ObjectMapper方式慢的多.你自己真的在实际系统中充分测试过么?
新的测试:
3006 -- fj
700 -- jackson
2. 就算这样,也还是比jackson的ObjectMapper方式慢的多.你自己真的在实际系统中充分测试过么?
新的测试:
def mapping = new SerializeConfig() JSON.toJSONStringZ(new PlayerExtraBag(), mapping) long now = System.currentTimeMillis() 10000.times { JSON.toJSONStringZ(player, mapping) } println(System.currentTimeMillis() - now) def reader = new ObjectMapper() now = System.currentTimeMillis() 10000.times { reader.writeValueAsString(player) } println(System.currentTimeMillis() - now)
3006 -- fj
700 -- jackson
wenshao 写道
排除掉第一次调用,重新测试!
白色毒药 写道
关于速度快有点大言不惭啊
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
output :
2206
1210
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
long now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { JSON.toJSONStringZ(player, mapping, SerializerFeature.WriteMapNullValue, SerializerFeature.SortField); } System.out.println(System.currentTimeMillis() - now); now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { new JSONObject(player).toString(); } System.out.println(System.currentTimeMillis() - now);
output :
2206
1210
11 楼
白色毒药
2012-08-19
1. 确实快了点,原因是?
2. 就算这样,也还是比jackson的ObjectMapper方式慢的多.你自己真的在实际系统中充分测试过么?
新的测试:
3006 -- fj
700 -- jackson
2. 就算这样,也还是比jackson的ObjectMapper方式慢的多.你自己真的在实际系统中充分测试过么?
新的测试:
def mapping = new SerializeConfig() JSON.toJSONStringZ(new PlayerExtraBag(), mapping) long now = System.currentTimeMillis() 10000.times { JSON.toJSONStringZ(player, mapping) } println(System.currentTimeMillis() - now) def reader = new ObjectMapper() now = System.currentTimeMillis() 10000.times { reader.writeValueAsString(player) } println(System.currentTimeMillis() - now)
3006 -- fj
700 -- jackson
wenshao 写道
排除掉第一次调用,重新测试!
白色毒药 写道
关于速度快有点大言不惭啊
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
output :
2206
1210
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
long now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { JSON.toJSONStringZ(player, mapping, SerializerFeature.WriteMapNullValue, SerializerFeature.SortField); } System.out.println(System.currentTimeMillis() - now); now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { new JSONObject(player).toString(); } System.out.println(System.currentTimeMillis() - now);
output :
2206
1210
10 楼
wenshao
2012-08-17
排除掉第一次调用,重新测试!
白色毒药 写道
关于速度快有点大言不惭啊
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
output :
2206
1210
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
long now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { JSON.toJSONStringZ(player, mapping, SerializerFeature.WriteMapNullValue, SerializerFeature.SortField); } System.out.println(System.currentTimeMillis() - now); now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { new JSONObject(player).toString(); } System.out.println(System.currentTimeMillis() - now);
output :
2206
1210
9 楼
白色毒药
2012-08-16
关于速度快有点大言不惭啊
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
output :
2206
1210
1.1.15版本
用我们的项目中的几个类做了测试, 比 org.json 的还不如
long now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { JSON.toJSONStringZ(player, mapping, SerializerFeature.WriteMapNullValue, SerializerFeature.SortField); } System.out.println(System.currentTimeMillis() - now); now = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { new JSONObject(player).toString(); } System.out.println(System.currentTimeMillis() - now);
output :
2206
1210
8 楼
wenshao
2012-08-15
shenzhang722 写道
温少 有两个问题
1.不知道为何FastJSON序列化不支持带有中文包路径的类
2.循环引用的时候也还有点问题,貌似测试用例没有覆盖到
1.不知道为何FastJSON序列化不支持带有中文包路径的类
2.循环引用的时候也还有点问题,貌似测试用例没有覆盖到
希望你反馈给我,在github上创建一个issue,或者直接联系我。
7 楼
shenzhang722
2012-08-14
温少 有两个问题
1.不知道为何FastJSON序列化不支持带有中文包路径的类
2.循环引用的时候也还有点问题,貌似测试用例没有覆盖到
1.不知道为何FastJSON序列化不支持带有中文包路径的类
2.循环引用的时候也还有点问题,貌似测试用例没有覆盖到
6 楼
zxh277100963
2012-07-23
com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:354)
at com.alibaba.fastjson.JSON.toJSONString(JSON.java:438)
at com.htsoft.test.system.AppUserDaoTestCase.testFastJson(AppUserDaoTestCase.java:241)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:112)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 33 more
Caused by: com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:112)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 35 more
Caused by: com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:112)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 37 more
Caused by: com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:112)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 39 more
Caused by: com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.MapSerializer.write(MapSerializer.java:146)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:112)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 41 more
Caused by: com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:112)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 44 more
Caused by: java.lang.NullPointerException
at com.alibaba.fastjson.util.TypeUtils.isJSONTypeIgnore(TypeUtils.java:979)
at com.alibaba.fastjson.util.TypeUtils.isJSONTypeIgnore(TypeUtils.java:990)
at com.alibaba.fastjson.util.TypeUtils.computeGetters(TypeUtils.java:854)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.<init>(JavaBeanSerializer.java:64)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.<init>(JavaBeanSerializer.java:45)
at com.alibaba.fastjson.serializer.SerializeConfig.createJavaBeanSerializer(SerializeConfig.java:92)
at com.alibaba.fastjson.serializer.JSONSerializer.getObjectWriter(JSONSerializer.java:461)
at com.alibaba.fastjson.serializer.JSONSerializer.getObjectWriter(JSONSerializer.java:425)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:83)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 46 more
温少能帮我看看什么问题了引起的
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:354)
at com.alibaba.fastjson.JSON.toJSONString(JSON.java:438)
at com.htsoft.test.system.AppUserDaoTestCase.testFastJson(AppUserDaoTestCase.java:241)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:240)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:112)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 33 more
Caused by: com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:112)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 35 more
Caused by: com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:112)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 37 more
Caused by: com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:112)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 39 more
Caused by: com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.MapSerializer.write(MapSerializer.java:146)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:112)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 41 more
Caused by: com.alibaba.fastjson.JSONException: write javaBean error
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:188)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:112)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 44 more
Caused by: java.lang.NullPointerException
at com.alibaba.fastjson.util.TypeUtils.isJSONTypeIgnore(TypeUtils.java:979)
at com.alibaba.fastjson.util.TypeUtils.isJSONTypeIgnore(TypeUtils.java:990)
at com.alibaba.fastjson.util.TypeUtils.computeGetters(TypeUtils.java:854)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.<init>(JavaBeanSerializer.java:64)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.<init>(JavaBeanSerializer.java:45)
at com.alibaba.fastjson.serializer.SerializeConfig.createJavaBeanSerializer(SerializeConfig.java:92)
at com.alibaba.fastjson.serializer.JSONSerializer.getObjectWriter(JSONSerializer.java:461)
at com.alibaba.fastjson.serializer.JSONSerializer.getObjectWriter(JSONSerializer.java:425)
at com.alibaba.fastjson.serializer.ObjectFieldSerializer.writeProperty(ObjectFieldSerializer.java:83)
at com.alibaba.fastjson.serializer.JavaBeanSerializer.write(JavaBeanSerializer.java:175)
... 46 more
温少能帮我看看什么问题了引起的
相关推荐
目前最高版本的fastjson-1.1.22.jar
fastjson最快处理json的第三方工具包
在提供的压缩包文件中,`fastjson-1.1.22.jar`是Fastjson的运行时库,而`fastjson-1.1.22-sources.jar`则包含了源代码,方便开发者查看和学习。随着技术的发展,Fastjson不断优化和更新,解决新出现的问题,增加新的...
在使用FastJson-1.1.22.jar这个版本时,你会发现它包含了FastJson的核心功能。这个库可以直接添加到Java项目的类路径中,用于进行JSON操作。同时,fastjson-1.1.22-sources.jar则是源代码包,如果你需要查看或调试源...
在给定的文件列表中,`fastjson-1.1.22.jar`是Fastjson的库文件,将这个jar包添加到项目的类路径中即可。对于Maven项目,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.alibaba</groupId> ...
在给定的文件中,fastjson-1.1.22.jar是Fastjson的一个版本,包含了这个库的所有功能。 在选择Gson还是Fastjson时,开发者通常会考虑性能、易用性、社区支持和兼容性等因素。Gson以其强大的灵活性和丰富的特性受到...
在`fastjson-1.1.22-release.zip`中,你将找到Fastjson的相关文档和源码,有助于理解和优化使用。 3. **json-lib**: json-lib是一个多库集成的JSON库,它支持多种Java环境,包括JDK1.5。`json-lib-2.4-jdk15-...
druid 1.1.22 fastjson 1.2.71 项目功能 架构潮流:系统采用SpringBoot+VUE前后端分离,前端单独部署,Nginx负载均衡 接口友好:同时支持swagger2、knife4j两种可视化接口API调试,支持离线接口文档; 任务管理:...
功能介绍: 销售管理,采购管理,库存管理,应收与收款,...其他:autopoi, fastjson,poi,Swagger-ui,quartz, lombok(简化代码)等。 前端 基础框架:ant-design-vue- Ant Design Of Vue 实现 JavaScript框架:Vue
- fastjson 1.2.71 ## 项目功能 1. 架构潮流:系统采用SpringBoot+VUE前后端分离,前端单独部署,Nginx负载均衡 2. 接口友好:同时支持swagger2、knife4j两种可视化接口API调试,支持离线接口文档; 3. 任务管理:...