首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

fastjson 公布正式版本1.0.1

2012-12-20 
fastjson 发布正式版本1.0.1Fast是一个JSON的Processor,功能强大、易用、快速的!* 功能强大。完全兼容json.or

fastjson 发布正式版本1.0.1
Fast是一个JSON的Processor,功能强大、易用、快速的!
    * 功能强大。完全兼容json.org的规范,支持Java Bean、Map、Collections、Date、Enum。
    * 易用。提供简单易用的toJSONString和parseObject接口,直接支持Java Bean,不需要额外配置映射。
    * 快速。比目前已知的其他Java JSON Processor都要快,包括JSON-LIB、Simple JSON、GSON、Jackson。
    * 开源。目前Fastjson是一个开源项目,采用Apache License 2.0协议,是阿里巴巴开源平台中的一个项目,公开的svn地址是:http://code.alibabatech.com/svn/fastjson/。公网上的 wiki地址是:http://code.alibabatech.com/wiki/display/fastjson/fastjson

当前文档
    * http://code.alibabatech.com/wiki/display/fastjson/fastjson
    * 下载该版本 http://code.alibabatech.com/svn/fastjson/repository/com.alibaba.fastjson/1.0.1/fastjson-1.0.1.jar


Release Notes
Bug
    * [FASTJSON-2] - null转成对象时抛异常
    * [FASTJSON-3] - 反序列化时不支持List<Map<String, String>>类型

New Feature
    * [FASTJSON-1] - 增加JavaBean到JSONObject之间的转换
    * [FASTJSON-7] - parse对数组的支持
public static class User {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}User user = new User();user.setId(123);user.setName("毛头");JSONSerializerMap mapping = new JSONSerializerMap();mapping.put(User.class, new JavaBeanSerializer(User.class, Collections.singletonMap("id", "uid")));JSONSerializer serializer = new JSONSerializer(mapping);serializer.write(user);String jsonString = serializer.toString();Assert.assertEquals("{"uid":123}", jsonString);

在上面的例子中,User类有两个字段,过滤了name字段,而且把id字段重命名为uid。

public class JsonResult {private String message;private List results;public List getResults() {return results;}public void setResults(List obj) {this.results = obj;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}}

JsonResult 中的results是一个List,list中的对象有可能是 User对象,也可能是Group对象,如果我把
JsonResult对象生成json字符串,我该如果过滤呢,每次生成json字符串对象时,我只是知道一个可返回的属性列表,
User时是uid,name;Group时是id,groupName等等,

现在用json-lib 很容易实现,使用  JsonConfig setJsonPropertyFilter 方法,
使用 mapping.put(User.class, new JavaBeanSerializer(User.class, Collections.singletonMap("id", "uid")));
很难做Json的集中处理,总不能根据一个对象来写一段序列化配置吧。

明白你的意思了,考虑在1.0.2中实现,谢谢你指出这个问题。
int[] intArr = new int[] { 4, 2 };String jsonstr = JsonWrap.beanToJsonString_2(intArr);System.out.println(jsonstr);
报:Exception in thread "main" com.alibaba.fastjson.JSONException: TODO ERROR
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:129)
at com.alibaba.fastjson.parser.DefaultExtJSONParser.parseObject(DefaultExtJSONParser.java:160)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:120)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:130)
at com.talent.platform.core.json.JsonWrap.jsonStringToBean_2(JsonWrap.java:188)
at com.talent.platform.core.json.JsonWrap.main(JsonWrap.java:64)<dependencies><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-core-lgpl</artifactId><version>1.7.1</version><scope>test</scope></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-lgpl</artifactId><version>1.7.1</version><scope>test</scope></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>1.4</version><scope>test</scope></dependency><dependency><groupId>com.googlecode.json-simple</groupId><artifactId>json-simple</artifactId><version>1.1</version><scope>test</scope></dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><classifier>jdk15</classifier><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.5</version><scope>test</scope></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>1.6</version><scope>test</scope></dependency></dependencies>
我好汗!int[] intArr = new int[] { 4, 2 };String jsonstr = JsonWrap.beanToJsonString_2(intArr);System.out.println(jsonstr);
报:Exception in thread "main" com.alibaba.fastjson.JSONException: TODO ERROR
at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:129)
at com.alibaba.fastjson.parser.DefaultExtJSONParser.parseObject(DefaultExtJSONParser.java:160)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:120)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:130)
at com.talent.platform.core.json.JsonWrap.jsonStringToBean_2(JsonWrap.java:188)
at com.talent.platform.core.json.JsonWrap.main(JsonWrap.java:64)

我刚测试过,没问题啊!
int[] array = new int[] {1, 2};String text = JSON.toJSONString(array);JSON.parseObject(text, int[].class);System.out.println(text);


我用1.0.1版本测试的。<dependencies><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-core-lgpl</artifactId><version>1.7.1</version><scope>test</scope></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-lgpl</artifactId><version>1.7.1</version><scope>test</scope></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>1.4</version><scope>test</scope></dependency><dependency><groupId>com.googlecode.json-simple</groupId><artifactId>json-simple</artifactId><version>1.1</version><scope>test</scope></dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><classifier>jdk15</classifier><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.5</version><scope>test</scope></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>1.6</version><scope>test</scope></dependency></dependencies>
我好汗!

这有什么问题么,要对比测试啊!JSONSerializer serializer = new JSONSerializer(new JSONSerializerMap().put(User.class, new JavaBeanSerializer(User.class, Collections.singletonMap("id", "uid"))));


这里, 写几个, 就显示几个. 不写, 就全过滤了?

是的,你猜对了!



温少. 假如User.class的字段为filed1, filed2, ..., filed100, id, name

需要将id重命名为uid, 同时过滤掉name. 但保留filed1~filed100不变

这个时候, 是不是很别扭..
JSONSerializer serializer = new JSONSerializer(new JSONSerializerMap().put(User.class, new JavaBeanSerializer(User.class, Collections.singletonMap("id", "uid"))));


这里, 写几个, 就显示几个. 不写, 就全过滤了?

是的,你猜对了!



温少. 假如User.class的字段为filed1, filed2, ..., filed100, id, name

需要将id重命名为uid, 同时过滤掉name. 但保留filed1~filed100不变

这个时候, 是不是很别扭..


是啊,我也觉得不妥,所以要改进!
JSONSerializer serializer = new JSONSerializer(new JSONSerializerMap().put(User.class, new JavaBeanSerializer(User.class, Collections.singletonMap("id", "uid"))));


这里, 写几个, 就显示几个. 不写, 就全过滤了?

是的,你猜对了!



温少. 假如User.class的字段为filed1, filed2, ..., filed100, id, name

需要将id重命名为uid, 同时过滤掉name. 但保留filed1~filed100不变

这个时候, 是不是很别扭..

我认为正常,因为这就象 sql 语句的写法。但不知有没有类似 * 号这样的通配符?如果没有的话,确实麻烦点。建议参考 sql 语句选择字段的做法。 //字符串去空格处理 jsonConfig.registerJsonValueProcessor(java.lang.String.class, new StringJsonValueProcessor()); //日期值处理器 jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor());
对对象类型处理机制,是否也可以考虑json-lib的实现方式,
这样对日期的处理就会更加灵活了。
//字符串去空格处理 jsonConfig.registerJsonValueProcessor(java.lang.String.class, new StringJsonValueProcessor()); //日期值处理器 jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor());
对对象类型处理机制,是否也可以考虑json-lib的实现方式,
这样对日期的处理就会更加灵活了。

嗯,这是可以参考的一种实现,周末有空了就去做! //字符串去空格处理 jsonConfig.registerJsonValueProcessor(java.lang.String.class, new StringJsonValueProcessor()); //日期值处理器 jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor());
对对象类型处理机制,是否也可以考虑json-lib的实现方式,
这样对日期的处理就会更加灵活了。

嗯,这是可以参考的一种实现,周末有空了就去做!


wenshao呀,等了好久了,都不有看到有这个功能呀,项目里已经用了fastjson 如果有这个功能那就方便很多呀 36 楼 tterry 2011-03-31   国内呢  还搞个英文页

热点排行