Java的JSON处理器 fastjson 发布1.1.3版本
openkk 13年前
<p><a href="http://www.open-open.com/open306336.htm" target="_blank">fastjson </a>是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。</p> <p>主要特点:</p> <ul> <li>快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson) </li> <li>强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum) </li> <li>零依赖(没有依赖其它任何类库除了JDK) </li> </ul> <p>示例代码:</p> <pre class="brush:java; toolbar: true; auto-links: false;">import com.alibaba.fastjson.JSON; Group group = new Group(); group.setId(0L); group.setName("admin"); User guestUser = new User(); guestUser.setId(2L); guestUser.setName("guest"); User rootUser = new User(); rootUser.setId(3L); rootUser.setName("root"); group.getUsers().add(guestUser); group.getUsers().add(rootUser); String jsonString = JSON.toJSONString(group); System.out.println(jsonString);</pre> <p></p> <p><span style="line-height:25px;background-color:#efefef;font-family:Helvetica, Tahoma, Arial, sans-serif;font-size:15px;" class="Apple-style-span">Fastjson 1.1.3是一个重要的功能增强版本,在这个版本开始,fastjson支持循环引用,完善支持WriteClassName的特性,使得fastjson开始具备替换hessian和java serialize的能力。 <br /> <br /> <br /> <strong style="font-weight:bold;">支持循环引用。</strong> <br /> <br /> 很多用户在初次使用fastjson时都遇到了循环引用的问题,这是反映最多的问题,我越来越认识到支持循环引用的必要性。经过测试,加入循环应用的支持对性能的影响很小,小于5%。我决定在1.1.3加入循环应用支持,而且是缺省打开这个特性。 <br /> <br /> fastjson支持的循环应用是自然的,不需要象jackson那样,需要Annotation设置。fastjson支持的引用,是基于path的,方便javascript解析。 <br /> <br /> 语法 <br /> </span></p> <div style="padding-bottom:1px;overflow-x:auto;overflow-y:auto;background-color:transparent;padding-left:1px;width:766px;padding-right:1px;font-family:Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace;word-wrap:break-word;margin-left:9px;font-size:12px;word-break:break-all;padding-top:1px;" class="dp-highlighter"> <div class="bar"> <div style="text-align:left;padding-bottom:3px;margin:0px;padding-left:3px;padding-right:3px;color:black;font-weight:bold;padding-top:3px;" class="tools"> Java代码 <a style="color:#006699;text-decoration:underline;" title="收藏这段代码" href="/misc/goto?guid=4958187758951673552"></a> </div> </div> <ol style="border-bottom:#d1d7dc 1px solid;border-left:#d1d7dc 1px solid;padding-bottom:2px;line-height:1.4em;background-color:#ffffff;list-style-type:decimal;margin:0px 0px 1px;padding-left:0px;padding-right:0px;color:#2b91af;font-size:1em;border-top:#d1d7dc 1px solid;border-right:#d1d7dc 1px solid;padding-top:2px;" class="dp-j"> <li style="border-left:#d1d7dc 1px solid;padding-bottom:0px;line-height:18px;background-color:#fafafa;margin:0px 0px 0px 38px;padding-left:10px;padding-right:0px;font-size:1em;padding-top:0px;"><span style="color:black;"><span style="color:black;">{</span><span style="color:blue;" class="string">"$ref"</span><span style="color:black;">:</span><span style="color:blue;" class="string">"$"</span><span style="color:black;">} </span><span style="color:#008200;" class="comment">// 引用根对象</span><span style="color:black;"> </span></span></li> <li style="border-left:#d1d7dc 1px solid;padding-bottom:0px;line-height:18px;background-color:#fafafa;margin:0px 0px 0px 38px;padding-left:10px;padding-right:0px;font-size:1em;padding-top:0px;"><span style="color:black;">{<span style="color:blue;" class="string">"$ref"</span><span style="color:black;">:</span><span style="color:blue;" class="string">"$"</span><span style="color:black;">} </span><span style="color:#008200;" class="comment">// 引用根对象</span><span style="color:black;"> </span></span></li> <li style="border-left:#d1d7dc 1px solid;padding-bottom:0px;line-height:18px;background-color:#fafafa;margin:0px 0px 0px 38px;padding-left:10px;padding-right:0px;font-size:1em;padding-top:0px;"><span style="color:black;">{<span style="color:blue;" class="string">"$ref"</span><span style="color:black;">:</span><span style="color:blue;" class="string">"@"</span><span style="color:black;">} </span><span style="color:#008200;" class="comment">// 引用自己</span><span style="color:black;"> </span></span></li> <li style="border-left:#d1d7dc 1px solid;padding-bottom:0px;line-height:18px;background-color:#fafafa;margin:0px 0px 0px 38px;padding-left:10px;padding-right:0px;font-size:1em;padding-top:0px;"><span style="color:black;">{<span style="color:blue;" class="string">"$ref"</span><span style="color:black;">:</span><span style="color:blue;" class="string">".."</span><span style="color:black;">} </span><span style="color:#008200;" class="comment">// 引用父对象</span><span style="color:black;"> </span></span></li> <li style="border-left:#d1d7dc 1px solid;padding-bottom:0px;line-height:18px;background-color:#fafafa;margin:0px 0px 0px 38px;padding-left:10px;padding-right:0px;font-size:1em;padding-top:0px;"><span style="color:black;">{<span style="color:blue;" class="string">"$ref"</span><span style="color:black;">:</span><span style="color:blue;" class="string">"../.."</span><span style="color:black;">} </span><span style="color:#008200;" class="comment">// 引用父对象的父对象</span><span style="color:black;"> </span></span></li> <li style="border-left:#d1d7dc 1px solid;padding-bottom:0px;line-height:18px;background-color:#fafafa;margin:0px 0px 0px 38px;padding-left:10px;padding-right:0px;font-size:1em;padding-top:0px;"><span style="color:black;">{<span style="color:blue;" class="string">"$ref"</span><span style="color:black;">:</span><span style="color:blue;" class="string">"$.members[0].reportTo"</span><span style="color:black;">} </span><span style="color:#008200;" class="comment">// 基于路径的引用</span><span style="color:black;"> </span></span></li> </ol> </div> <br /> <br /> 具体例子看这里:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=5832796 <br /> <br /> <br /> <strong style="font-weight:bold;">自省支持</strong> <br /> 在标准中,将对象序列化为JSON文本之后,就丢失了类型信息。虽然fastjson能够支持parse时传入Class来实现类型的识别,但是这个有局限性,在fastjson 1.1.3之后,完善支持一个特性,就是自省。 <br /> <br /> 具体例子请看这里:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=5832803 <br /> <br /> <strong style="font-weight:bold;">支持非缺省构造函数和工厂方法构造对象</strong> <br /> fastjson 1.1.3开始支持没有缺省构造函数的Java对象的反序列化。通过@JSONCreator来标识构造对象的方式。 <br /> <br /> 具体请看这里: <br /> * 非缺省构造函数 http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=5832818 <br /> * 工厂方法 http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=5832821 <br /> <br /> <strong style="font-weight:bold;">原型接口</strong> <br /> 以接口的方式来操作json数据,这个特性是借鉴了jackson的功能。 <br /> 具体例子看这里:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=5832824 <br /> <br /> <strong style="font-weight:bold;">How to get it?</strong> <br /> If you're Maven user, just use our maven repository(http://code.alibabatech.com/mvn/releases/) with folloging dependency <br /> <div style="padding-bottom:1px;overflow-x:auto;overflow-y:auto;background-color:transparent;padding-left:1px;width:766px;padding-right:1px;font-family:Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace;word-wrap:break-word;margin-left:9px;font-size:12px;word-break:break-all;padding-top:1px;" class="dp-highlighter"> <div class="bar"> <div style="text-align:left;padding-bottom:3px;margin:0px;padding-left:3px;padding-right:3px;color:black;font-weight:bold;padding-top:3px;" class="tools"> Java代码 <a style="color:#006699;text-decoration:underline;" title="收藏这段代码" href="/misc/goto?guid=4958187758951673552"></a> </div> </div> <ol style="border-bottom:#d1d7dc 1px solid;border-left:#d1d7dc 1px solid;padding-bottom:2px;line-height:1.4em;background-color:#ffffff;list-style-type:decimal;margin:0px 0px 1px;padding-left:0px;padding-right:0px;color:#2b91af;font-size:1em;border-top:#d1d7dc 1px solid;border-right:#d1d7dc 1px solid;padding-top:2px;" class="dp-j"> <li style="border-left:#d1d7dc 1px solid;padding-bottom:0px;line-height:18px;background-color:#fafafa;margin:0px 0px 0px 38px;padding-left:10px;padding-right:0px;font-size:1em;padding-top:0px;"><span style="color:black;"><span style="color:black;"><dependency> </span></span></li> <li style="border-left:#d1d7dc 1px solid;padding-bottom:0px;line-height:18px;background-color:#fafafa;margin:0px 0px 0px 38px;padding-left:10px;padding-right:0px;font-size:1em;padding-top:0px;"><span style="color:black;"> <groupId>com.alibaba</groupId> </span></li> <li style="border-left:#d1d7dc 1px solid;padding-bottom:0px;line-height:18px;background-color:#fafafa;margin:0px 0px 0px 38px;padding-left:10px;padding-right:0px;font-size:1em;padding-top:0px;"><span style="color:black;"> <artifactId>fastjson</artifactId> </span></li> <li style="border-left:#d1d7dc 1px solid;padding-bottom:0px;line-height:18px;background-color:#fafafa;margin:0px 0px 0px 38px;padding-left:10px;padding-right:0px;font-size:1em;padding-top:0px;"><span style="color:black;"> <version><span style="color:#c00000;" class="number">1.1</span><span style="color:black;">.</span><span style="color:#c00000;" class="number">3</span><span style="color:black;"></version> </span></span></li> <li style="border-left:#d1d7dc 1px solid;padding-bottom:0px;line-height:18px;background-color:#fafafa;margin:0px 0px 0px 38px;padding-left:10px;padding-right:0px;font-size:1em;padding-top:0px;"><span style="color:black;"></dependency> </span></li> </ol> </div> <br /> <br /> <strong style="font-weight:bold;">Downlaods</strong> <br /> Binary : http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.1.3/fastjson-1.1.3.jar <br /> Source :http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.1.3/fastjson-1.1.3-sources.jar <br /> Subversion : http://code.alibabatech.com/svn/fastjson/trunk/fastjson/ <br /> <br /> <strong style="font-weight:bold;">Issue tracking</strong> <br /> http://code.alibabatech.com/jira/plugins/servlet/project-config/FASTJSON/versions <br /> * Bug <br /> [FASTJSON-73] - 不支持Set类型数据的反序列 <br /> [FASTJSON-77] - JSONSerializerMap存在兼容问题 <br /> [FASTJSON-78] - java.util.concurrent.TimeUnit序列化数据不对 <br /> <br /> * Improvement <br /> [FASTJSON-71] - 使用Base64编码优化byte[]字段的序列化和反序列化性能 <br /> [FASTJSON-72] - 使用SoftReference处理ThreadLocalCache <br /> <br /> * New Feature <br /> [FASTJSON-74] - 支持序列化时输出类型信息 <br /> [FASTJSON-75] - 支持Key类型不是String的Map的序列化和反序列化 <br /> [FASTJSON-80] - 原型接口 <br /> [FASTJSON-81] - 支持循环引用 <br /> <br /> 转自: <a href="/misc/goto?guid=4958187760370307891" target="_blank">http://code.alibabatech.com/wiki/display/FastJSON/Release+Notes+%281.1.3%29</a> <br />