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 />