论坛首页 Java企业应用论坛

fastjson 发布正式版本1.0.1

浏览 12644 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-02-23  
楼主可以考虑放到 code.taobao.org 上面, 支持咱们的 淘蝌蚪
0 请登录后投票
   发表时间:2011-02-23  
能讲一下与json-lib的优劣势吗
0 请登录后投票
   发表时间:2011-02-23  
forchenyun 写道
能讲一下与json-lib的优劣势吗

这个 fastjson 速度是最快的
0 请登录后投票
   发表时间:2011-02-23  
wenshao 写道
ccvcd 写道
关注fastjson有段时间了,很想使用,以前用json-lib,一直没有下定决心使用fastjson很重要的一点是,json-lib在生成json字符串的时候可以实现过滤对象属性,可fastjson里一直没有看到这方面的解决办法,是不是考虑实现这一特性呢??


这个功能是支持的!比如:
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。


user.setName("毛头");好眼熟的昵称。。。
0 请登录后投票
   发表时间:2011-02-23   最后修改:2011-02-23
wenshao 写道

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



温少, 把id重命名为uid我看见.
过滤name是怎么过滤的?

莫非是
JSONSerializer serializer = new JSONSerializer(new JSONSerializerMap().put(User.class, new JavaBeanSerializer(User.class, Collections.singletonMap("id", "uid"))));



这里, 写几个, 就显示几个. 不写, 就全过滤了?
0 请登录后投票
   发表时间:2011-02-23  
wenshao 写道
ccvcd 写道
关注fastjson有段时间了,很想使用,以前用json-lib,一直没有下定决心使用fastjson很重要的一点是,json-lib在生成json字符串的时候可以实现过滤对象属性,可fastjson里一直没有看到这方面的解决办法,是不是考虑实现这一特性呢??


这个功能是支持的!比如:
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的集中处理,总不能根据一个对象来写一段序列化配置吧。
0 请登录后投票
   发表时间:2011-02-23  
Rooock 写道
wenshao 写道

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



温少, 把id重命名为uid我看见.
过滤name是怎么过滤的?

莫非是
JSONSerializer serializer = new JSONSerializer(new JSONSerializerMap().put(User.class, new JavaBeanSerializer(User.class, Collections.singletonMap("id", "uid"))));



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


是的,你猜对了!
0 请登录后投票
   发表时间:2011-02-23  
ccvcd 写道
wenshao 写道
ccvcd 写道
关注fastjson有段时间了,很想使用,以前用json-lib,一直没有下定决心使用fastjson很重要的一点是,json-lib在生成json字符串的时候可以实现过滤对象属性,可fastjson里一直没有看到这方面的解决办法,是不是考虑实现这一特性呢??


这个功能是支持的!比如:
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中实现,谢谢你指出这个问题。
0 请登录后投票
   发表时间:2011-02-23  
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)
0 请登录后投票
   发表时间:2011-02-23  
字段过滤的API,我觉得可以优化一下
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics