精华帖 (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" 因为我有数以百计的节点输出,输出内容已经很大了,如果不能控制这个输出的话,那就更大了 |
|
返回顶楼 | |
发表时间:2011-08-26
下载了你的fastjson,但是在尝试了一下后,我又换回了原来用的gson。
我认为你的框架把主要精力用在了Java->json上。网站上面的例子基本也是java->json。可惜我主要的用途是json->Java。 在你的网站上面,json->java的说明和例子都很少。而且我发现你json->java的输入基本上都是string,而我使用gson的时候可以直接从Reader流中读取。希望能够加强这方面的投入。无论是代码功能还是文档。 |
|
返回顶楼 | |
发表时间:2011-08-26
我想知道有没有比json更好的格式
就跟sql的table一样 name age xx 16 oo 17 |
|
返回顶楼 | |
发表时间: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; } } |
|
返回顶楼 | |
发表时间: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/ |
|
返回顶楼 | |
发表时间:2011-08-28
下载测试中……
|
|
返回顶楼 | |
发表时间: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”这样的格式。 还是我的代码有问题吗? |
|
返回顶楼 | |
发表时间: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")); } |
|
返回顶楼 | |
发表时间: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”后可以了 |
|
返回顶楼 | |