论坛首页 Java企业应用论坛

jsonconvert-0.1.0正式版 发布~

浏览 24703 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-09-02  
在JASON与XML之间徘徊。。。。
0 请登录后投票
   发表时间:2011-09-02   最后修改:2011-09-02
jackra 写道
在JASON与XML之间徘徊。。。。

xml使用的场景其实并不多, 现状很多都是滥用。 如果你只是用于数据的传输, 用json比xml好~
0 请登录后投票
   发表时间:2011-09-02  
期待温少接招  O(∩_∩)O哈哈~
0 请登录后投票
   发表时间:2011-09-02  
nbzhang出马,fastjson估计就要掉出"世界最快的json解析器"这个名头了。 
看好jsonconvert彻底打败fastjson.
0 请登录后投票
   发表时间:2011-09-02   最后修改:2011-09-02
和fastjson一样,先去那个性能测试网站跑分,出来结果再来比较吧
https://github.com/eishay/jvm-serializers

0 请登录后投票
   发表时间:2011-09-02   最后修改:2011-09-02
先给你一个良好贴

之前我测试过jsonconvert-0.1.0beta版本,性能还可以,比jackson稍微差一些。

我想重新测试一遍,发现jsonconvert-0.1.0跑不过测试了。报错信息如下:

jsonconvert-
com.tencent.tendon.convert.json.JsonException: a json object text must begin with '{' (position = 1)
	at com.tencent.tendon.convert.json.JsonDefaultReader.checkObject(Unknown Source)
	at com.tencent.tendon.convert.json.JsonDefaultToken.convertFrom(Unknown Source)
	at com.tencent.tendon.convert.json.JsonTokens$JsonSimpleArrayToken.convertFrom(Unknown Source)
	at com.tencent.tendon.convert.json.JsonTokens$JsonSimpleArrayToken.convertFrom(Unknown Source)
	at com.tencent.tendon.convert.json.JsonConvert.convertArrayFrom(Unknown Source)
	at com.tencent.tendon.convert.json.JsonConvert.convertArrayFrom(Unknown Source)
	at com.alibaba.json.test.codec.JsonConvertCodec.decodeObject(JsonConvertCodec.java:21)
	at com.alibaba.json.test.benchmark.decode.EishayDecode.execute(EishayDecode.java:24)


由于错误发生,测试无法继续,拿不到性能数据,这次没办法作比较。

你自己的测试程序比较片面,我建议你使用更综合场景做测试。

比如说https://github.com/eishay/jvm-serializers/提供的测试。不过那有点麻烦,我已经剥离了其中的测试代码。在这里:
http://code.alibabatech.com/svn/fastjson/trunk/fastjson/src/test/java/data/media/

是一个这样的JSON文本:
{"images":[{"height":768,"size":"LARGE","title":"Javaone Keynote","uri":"http://javaone.com/keynote_large.jpg","width":1024},{"height":240,"size":"SMALL","title":"Javaone Keynote","uri":"http://javaone.com/keynote_small.jpg","width":320}],"media":{"bitrate":262144,"duration":18000000,"format":"video/mpg4","height":480,"persons":["Bill Gates","Steve Jobs"],"player":"JAVA","size":58982400,"title":"Javaone Keynote","uri":"http://javaone.com/keynote.mpg","width":640}}


构建测试的代码:
MediaContent content = new MediaContent();

Media media = new Media();
media.uri = "http://javaone.com/keynote.mpg";
media.title = "Javaone Keynote";
media.width = 640;
media.height = 480;
media.format = "video/mpg4";
media.duration = 18000000;
media.size = 58982400;
media.bitrate = 262144;
media.persons = Arrays.asList("Bill Gates", "Steve Jobs");
media.player = Player.JAVA;
media.copyright = null;

content.setMedia(media);

List<Image> images = new ArrayList<Image>();
{
    Image image = new Image();
    image.setUri("http://javaone.com/keynote_large.jpg");
    image.setTitle("Javaone Keynote");
    image.setWidth(1024);
    image.setHeight(768);
    image.setSize(Size.LARGE);
    images.add(image);
}
{
    Image image = new Image();
    image.setUri("http://javaone.com/keynote_small.jpg");
    image.setTitle("Javaone Keynote");
    image.setWidth(320);
    image.setHeight(240);
    image.setSize(Size.SMALL);
    images.add(image);
}
content.setImages(images);


有竞争才有进步,希望你能够把jsonconvert做得够好!希望你使用maven仓库发布jar和sources.jar,那样测试更方便一些。
0 请登录后投票
   发表时间:2011-09-02  
wenshao 写道
先给你一个良好贴

之前我测试过jsonconvert-0.1.0beta版本,性能还可以,比jackson稍微差一些。

我想重新测试一遍,发现jsonconvert-0.1.0跑不过测试了。报错信息如下:

jsonconvert-
com.tencent.tendon.convert.json.JsonException: a json object text must begin with '{' (position = 1)
	at com.tencent.tendon.convert.json.JsonDefaultReader.checkObject(Unknown Source)
	at com.tencent.tendon.convert.json.JsonDefaultToken.convertFrom(Unknown Source)
	at com.tencent.tendon.convert.json.JsonTokens$JsonSimpleArrayToken.convertFrom(Unknown Source)
	at com.tencent.tendon.convert.json.JsonTokens$JsonSimpleArrayToken.convertFrom(Unknown Source)
	at com.tencent.tendon.convert.json.JsonConvert.convertArrayFrom(Unknown Source)
	at com.tencent.tendon.convert.json.JsonConvert.convertArrayFrom(Unknown Source)
	at com.alibaba.json.test.codec.JsonConvertCodec.decodeObject(JsonConvertCodec.java:21)
	at com.alibaba.json.test.benchmark.decode.EishayDecode.execute(EishayDecode.java:24)


由于错误发生,测试无法继续,拿不到性能数据,这次没办法作比较。

你自己的测试程序比较片面,我建议你使用更综合场景做测试。

比如说https://github.com/eishay/jvm-serializers/提供的测试。不过那有点麻烦,我已经剥离了其中的测试代码。在这里:
http://code.alibabatech.com/svn/fastjson/trunk/fastjson/src/test/java/data/media/

是一个这样的JSON文本:
{"images":[{"height":768,"size":"LARGE","title":"Javaone Keynote","uri":"http://javaone.com/keynote_large.jpg","width":1024},{"height":240,"size":"SMALL","title":"Javaone Keynote","uri":"http://javaone.com/keynote_small.jpg","width":320}],"media":{"bitrate":262144,"duration":18000000,"format":"video/mpg4","height":480,"persons":["Bill Gates","Steve Jobs"],"player":"JAVA","size":58982400,"title":"Javaone Keynote","uri":"http://javaone.com/keynote.mpg","width":640}}


构建测试的代码:
MediaContent content = new MediaContent();

Media media = new Media();
media.uri = "http://javaone.com/keynote.mpg";
media.title = "Javaone Keynote";
media.width = 640;
media.height = 480;
media.format = "video/mpg4";
media.duration = 18000000;
media.size = 58982400;
media.bitrate = 262144;
media.persons = Arrays.asList("Bill Gates", "Steve Jobs");
media.player = Player.JAVA;
media.copyright = null;

content.setMedia(media);

List<Image> images = new ArrayList<Image>();
{
    Image image = new Image();
    image.setUri("http://javaone.com/keynote_large.jpg");
    image.setTitle("Javaone Keynote");
    image.setWidth(1024);
    image.setHeight(768);
    image.setSize(Size.LARGE);
    images.add(image);
}
{
    Image image = new Image();
    image.setUri("http://javaone.com/keynote_small.jpg");
    image.setTitle("Javaone Keynote");
    image.setWidth(320);
    image.setHeight(240);
    image.setSize(Size.SMALL);
    images.add(image);
}
content.setImages(images);


有竞争才有进步,希望你能够把jsonconvert做得够好!希望你使用maven仓库发布jar和sources.jar,那样测试更方便一些。




看异常信息第8行, 应该是调错方法了,  你调用的是JsonConvert.convertArrayFrom 方法吧, 这是返回数组的, 应该调用JsonConvert.convertFrom 。
    https://github.com/eishay/jvm-serializers/  没用过, 现在只是做了个简单测试而已, 可能有些是测试不全面, 目前更多是对功能的改善, 性能优化方面会持续更进~
0 请登录后投票
   发表时间:2011-09-02  
nbzhang 写道
arong 写道
jsonconvert-0.1.0和fastjason支不支持动态过滤啊,类似jsonlib的config.excludes().

jsonconvert的功能主要是一般场景需要的, 你说的动态过滤目前还不支持, 不过想问下动态过滤一般用于什么场景呢。 既然有这个字段的值, 转不转换都无所谓吧, 打不了转换的对象你不访问这个字段的值就行了, 如果这个字段的值再class里面没有对应的field就会被跳过~

动态过滤就是同个类的不同查询方式要过滤不同的字段,其实主要是疑惑如果json输出的内容过多会不会影响性能。比如有40-~50个属性,输出50-~100条记录,相比只输出10个属性,性能及带宽有影响吗。
0 请登录后投票
   发表时间:2011-09-02  
是我重新做测试的时候搞错了,我做的测试比较如下:

我新作的测试如下:
Decode
EishayDecode	fastjson	3,236	YoungGC 17	FullGC 0
EishayDecode	fastjson	1,520	YoungGC 12	FullGC 0
EishayDecode	fastjson	1,537	YoungGC 26	FullGC 0
EishayDecode	fastjson	1,530	YoungGC 35	FullGC 0
EishayDecode	fastjson	1,535	YoungGC 22	FullGC 0

EishayDecode	jsonconvert	2,174	YoungGC 18	FullGC 0
EishayDecode	jsonconvert	2,026	YoungGC 37	FullGC 0
EishayDecode	jsonconvert	1,996	YoungGC 13	FullGC 0
EishayDecode	jsonconvert	2,014	YoungGC 20	FullGC 0
EishayDecode	jsonconvert	2,000	YoungGC 14	FullGC 0

EishayDecode	jackson 	4,987	YoungGC 50	FullGC 0
EishayDecode	jackson 	4,474	YoungGC 73	FullGC 0
EishayDecode	jackson 	4,456	YoungGC 57	FullGC 0
EishayDecode	jackson 	4,469	YoungGC 42	FullGC 0
EishayDecode	jackson 	4,437	YoungGC 13	FullGC 0


从这个测试来看,decode的性能,jsonconvert-0.1.0的性能和fastjson相差30%左右,比jackson快一倍以上。

测试的案例在上一个帖子中,这是我做的测试,你重新测试一遍,看我的测试是否有问题。
0 请登录后投票
   发表时间:2011-09-02  
arong 写道
nbzhang 写道
arong 写道
jsonconvert-0.1.0和fastjason支不支持动态过滤啊,类似jsonlib的config.excludes().

jsonconvert的功能主要是一般场景需要的, 你说的动态过滤目前还不支持, 不过想问下动态过滤一般用于什么场景呢。 既然有这个字段的值, 转不转换都无所谓吧, 打不了转换的对象你不访问这个字段的值就行了, 如果这个字段的值再class里面没有对应的field就会被跳过~

动态过滤就是同个类的不同查询方式要过滤不同的字段,其实主要是疑惑如果json输出的内容过多会不会影响性能。比如有40-~50个属性,输出50-~100条记录,相比只输出10个属性,性能及带宽有影响吗。

哦,  了解你这个场景了, jsonconvert的配置都是全局配置, 对一个类进行配置, 没有对单个对象进行不同配置。 这点需要想fastjson的配置性学习了。  0.1.0为了实现基本功能所以没有很灵活的配置性。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics