论坛首页 Java企业应用论坛

请大家帮忙测试fastjson 1.1.3版本

浏览 8040 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-08-26  
wenshao 写道
新增加功能,支持序列化时输出类型信息。

在rpc的场景,用户自定义的类型信息中,参数类型是Object,传递之后需要按照原来的类型构造对象。这需要序列化时提供类型信息。在1.1.3版本中,完整实现了SerializerFeature.WriteClassName特性。

例如:
public void test_0() throws Exception {
    Entity entity = new Entity(3, "jobs");
    String text = JSON.toJSONString(entity, SerializerFeature.WriteClassName);
    System.out.println(text);
    // 输出 {"@type":"com.alibaba.json.test.bvt.WriteClassNameTest$Entity","id":3,"name":"jobs"}
    
    Entity entity2 = (Entity) JSON.parseObject(text, Object.class);
    
    Assert.assertEquals(entity.getId(), entity2.getId());
    Assert.assertEquals(entity.getName(), entity2.getName());
}

public static class Entity {
    private int    id;
    private String name;
    public Entity(){
    }
    public Entity(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;
    }
}


希望不要自动输出这种信息:"@type":"com.alibaba.json.test.bvt.WriteClassNameTest$Entity"
因为我有数以百计的节点输出,输出内容已经很大了,如果不能控制这个输出的话,那就更大了
0 请登录后投票
   发表时间:2011-08-26  
下载了你的fastjson,但是在尝试了一下后,我又换回了原来用的gson。
我认为你的框架把主要精力用在了Java->json上。网站上面的例子基本也是java->json。可惜我主要的用途是json->Java。
在你的网站上面,json->java的说明和例子都很少。而且我发现你json->java的输入基本上都是string,而我使用gson的时候可以直接从Reader流中读取。希望能够加强这方面的投入。无论是代码功能还是文档。
0 请登录后投票
   发表时间:2011-08-26  
我想知道有没有比json更好的格式
就跟sql的table一样

name age
xx    16
oo    17
0 请登录后投票
   发表时间:2011-08-27  
内部类为私有时会出错。有时编码需要把内部类设置成私有,但也需要转成JSON格式。是不是可能会进行改进?

测试代码如下:

public static void main(String[] args) {
		double f = -5.5000009;
		Long i = 4294967295l;
		System.out.println(BigInteger.valueOf(i));
		System.out.println(Math.round(f));
		List<AB> list = new ArrayList<AB>();
		list.add(new AB("2a", "3b"));
		list.add(new AB("4a", "6b"));
		list.add(new AB("6a", "7{sdf<>jgh\n}b"));
		list.add(new AB("8a", "9b"));
		list.add(new AB("10a", "11ba"));
		list.add(new AB("12a", "13b"));
		String[] abc = new String[] { "sf", "sdf", "dsffds", "sdfsdf{fds}" };
		Map<String, AB> map = new LinkedHashMap();
		int k = 0;
		for (AB a : list) {
			map.put(String.valueOf(k++), a);
		}
		System.out.println(JSON.toJSON(list));
		System.out.println(JSON.toJSON(abc));
		System.out.println(JSON.toJSON(new AB("10a", "11ba")));
		System.out.println(JSON.toJSON(map));

	}

	private static class AB {
		private String a;
		private String b;

		public AB() {
			super();
		}

		public AB(String a, String b) {
			super();
			this.a = a;
			this.b = b;
		}

		public String getA() {
			return a;
		}

		public String getB() {
			return b;
		}

	}
0 请登录后投票
   发表时间:2011-08-27  
xieboxin 写道
内部类为私有时会出错。有时编码需要把内部类设置成私有,但也需要转成JSON格式。是不是可能会进行改进?

测试代码如下:

public static void main(String[] args) {
		double f = -5.5000009;
		Long i = 4294967295l;
		System.out.println(BigInteger.valueOf(i));
		System.out.println(Math.round(f));
		List<AB> list = new ArrayList<AB>();
		list.add(new AB("2a", "3b"));
		list.add(new AB("4a", "6b"));
		list.add(new AB("6a", "7{sdf<>jgh\n}b"));
		list.add(new AB("8a", "9b"));
		list.add(new AB("10a", "11ba"));
		list.add(new AB("12a", "13b"));
		String[] abc = new String[] { "sf", "sdf", "dsffds", "sdfsdf{fds}" };
		Map<String, AB> map = new LinkedHashMap();
		int k = 0;
		for (AB a : list) {
			map.put(String.valueOf(k++), a);
		}
		System.out.println(JSON.toJSON(list));
		System.out.println(JSON.toJSON(abc));
		System.out.println(JSON.toJSON(new AB("10a", "11ba")));
		System.out.println(JSON.toJSON(map));

	}

	private static class AB {
		private String a;
		private String b;

		public AB() {
			super();
		}

		public AB(String a, String b) {
			super();
			this.a = a;
			this.b = b;
		}

		public String getA() {
			return a;
		}

		public String getB() {
			return b;
		}

	}


谢谢你的反馈,问题已经修正,请下载:
http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.1.3/

0 请登录后投票
   发表时间:2011-08-28  
下载测试中……
0 请登录后投票
   发表时间:2011-08-28  
private static SerializeConfig config = new SerializeConfig();

static {
	config.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
}

SerializerFeature[] features = { SerializerFeature.UseSingleQuotes,SerializerFeature.UseISO8601DateFormat };
json = JSON.toJSONString(object, config, features);


使用UseISO8601DateFormat时日期为:2011-08-26T15:26:09,
不使用UseISO8601DateFormat时日期为:1314343569000。
SerializeConfig始终无效,无法输出“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”这样的格式。
还是我的代码有问题吗?
0 请登录后投票
   发表时间:2011-08-28   最后修改:2011-08-28
flyfan 写道
private static SerializeConfig config = new SerializeConfig();

static {
	config.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
}

SerializerFeature[] features = { SerializerFeature.UseSingleQuotes,SerializerFeature.UseISO8601DateFormat };
json = JSON.toJSONString(object, config, features);


使用UseISO8601DateFormat时日期为:2011-08-26T15:26:09,
不使用UseISO8601DateFormat时日期为:1314343569000。
SerializeConfig始终无效,无法输出“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”这样的格式。
还是我的代码有问题吗?


存在其他类型的Date么?比如说java.sql.Date、java.sql.Timestamp,如果有。

static {
	config.put(java.util.Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
	config.put(java.sql.Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
	config.put(java.sql.Timestamp.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
}
0 请登录后投票
   发表时间:2011-08-28  
wenshao 写道
flyfan 写道
private static SerializeConfig config = new SerializeConfig();

static {
	config.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
}

SerializerFeature[] features = { SerializerFeature.UseSingleQuotes,SerializerFeature.UseISO8601DateFormat };
json = JSON.toJSONString(object, config, features);


使用UseISO8601DateFormat时日期为:2011-08-26T15:26:09,
不使用UseISO8601DateFormat时日期为:1314343569000。
SerializeConfig始终无效,无法输出“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”这样的格式。
还是我的代码有问题吗?


存在其他类型的Date么?比如说java.sql.Date、java.sql.Timestamp,如果有。

static {
	config.put(java.util.Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
	config.put(java.sql.Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
	config.put(java.sql.Timestamp.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
}

谢谢温少!加入“java.sql.Timestamp.class”后可以了
0 请登录后投票
论坛首页 Java企业应用版

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