该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-09-02
在JASON与XML之间徘徊。。。。
|
|
返回顶楼 | |
发表时间:2011-09-02
最后修改:2011-09-02
jackra 写道 在JASON与XML之间徘徊。。。。
xml使用的场景其实并不多, 现状很多都是滥用。 如果你只是用于数据的传输, 用json比xml好~ |
|
返回顶楼 | |
发表时间:2011-09-02
期待温少接招 O(∩_∩)O哈哈~
|
|
返回顶楼 | |
发表时间:2011-09-02
nbzhang出马,fastjson估计就要掉出"世界最快的json解析器"这个名头了。
看好jsonconvert彻底打败fastjson. |
|
返回顶楼 | |
发表时间:2011-09-02
最后修改:2011-09-02
|
|
返回顶楼 | |
发表时间: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,那样测试更方便一些。 |
|
返回顶楼 | |
发表时间: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/ 没用过, 现在只是做了个简单测试而已, 可能有些是测试不全面, 目前更多是对功能的改善, 性能优化方面会持续更进~ |
|
返回顶楼 | |
发表时间:2011-09-02
nbzhang 写道 arong 写道 jsonconvert-0.1.0和fastjason支不支持动态过滤啊,类似jsonlib的config.excludes().
jsonconvert的功能主要是一般场景需要的, 你说的动态过滤目前还不支持, 不过想问下动态过滤一般用于什么场景呢。 既然有这个字段的值, 转不转换都无所谓吧, 打不了转换的对象你不访问这个字段的值就行了, 如果这个字段的值再class里面没有对应的field就会被跳过~ 动态过滤就是同个类的不同查询方式要过滤不同的字段,其实主要是疑惑如果json输出的内容过多会不会影响性能。比如有40-~50个属性,输出50-~100条记录,相比只输出10个属性,性能及带宽有影响吗。 |
|
返回顶楼 | |
发表时间: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快一倍以上。 测试的案例在上一个帖子中,这是我做的测试,你重新测试一遍,看我的测试是否有问题。 |
|
返回顶楼 | |
发表时间: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为了实现基本功能所以没有很灵活的配置性。 |
|
返回顶楼 | |