阿里巴巴開源平臺發佈fastjson 1.0.5版本

版本1.0.5,對Parser和Serializer提供了更多的可擴展性。在Parser方面,提供了新的擴展方式能夠定製Deserializer,還支持TypeReference來提供類型信息。在Serializer方面,主要是提供新特性NameFilter和ValueFilter。

官方主頁:[url]http://code.alibabatech.com/wiki/display/FastJSON/Home[/url]

具體信息如下:
[b]Bug[/b]
- PropertyFilter對Map類型數據不起作用

[b]Improvement[/b]
- 序列化對JMX的CompositeData直接支持
- 序列化時對JMX的TablularData做特別支持!
- 序列化對異常類Throwable及派生類做特別支持

[b]New Feature[/b]
-序列化輸出時支持ValueFilter
- 序列化輸出時支持NameFilter
- Parser提供擴展機制
- Parser支持TypeReference指定類型信息。

[b]How to get it?[/b]
If you're Maven user, just use our maven repository(http://code.alibabatech.com/mvn/releases/) with folloging dependency

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.0.5</version>
</dependency>


Binary [url]http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.0.5/fastjson-1.0.5.jar[/url]
Source [url]http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.0.5/fastjson-1.0.5-sources.jar[/url]

[b]Demo 1 (TypeReference)[/b]

public static class Bean {
private int id;
private String name;
public Bean(){
}
public Bean(int id, String name){
this.id = id;
this.name = 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;}
}

/////////////////////

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;

String text;

{
List list = new ArrayList();
List mapList = new ArrayList();

Map<String, Bean> map = new HashMap<String, Bean>();
map.put("a", new Bean(123, "馬加爵"));
map.put("b", new Bean(234, "藥家鑫"));
map.put("c", new Bean(456, "劉+W"));

mapList.add(map);

list.add(mapList);

text = JSON.toJSONString(list);
}

System.out.println(text);

// text = [[{"b":{"name":"藥家鑫","id":234},"c":{"name":"劉+偉","id":456},"a":{"name":"馬加爵","id":123}}]]
List<List<Map<String, Bean>>> list = JSON.parseObject(text, new TypeReference< List<List<Map<String, Bean>>> >() {}); // 注意這裏
Map<String, Bean> map = list.get(0).get(0);

Assert.assertEquals(3, map.size());

Assert.assertEquals(123, ((Bean) map.get("a")).getId());
Assert.assertEquals(234, ((Bean) map.get("b")).getId());
Assert.assertEquals(456, ((Bean) map.get("c")).getId());

Assert.assertEquals("馬加爵", ((Bean) map.get("a")).getName());
Assert.assertEquals("藥家鑫", ((Bean) map.get("b")).getName());
Assert.assertEquals("劉+W", ((Bean) map.get("c")).getName());


[b]Demo2 NameFilter[/b]

NameFilter filter = new NameFilter() {

public String process(Object source, String name, Object value) {
if (name.equals("id")) {
return "ID";
}

return name;
}

};

SerializeWriter out = new SerializeWriter();
JSONSerializer serializer = new JSONSerializer(out);
serializer.getNameFilters().add(filter);

Map<String, Object> map = new HashMap<String, Object>();
map.put("id", 0);
serializer.write(map);

String text = out.toString();
Assert.assertEquals("{\"ID\":0}", text);


[b]Demo 3 ValueFilter[/b]

ValueFilter filter = new ValueFilter() {

public Object process(Object source, String name, Object value) {
if (name.equals("name")) {
return null;
}

return value;
}

};

SerializeWriter out = new SerializeWriter();
JSONSerializer serializer = new JSONSerializer(out);
serializer.getValueFilters().add(filter);

Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "AA");
serializer.write(map);

String text = out.toString();
Assert.assertEquals("{}", text);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章