对日期的序列化:
一种方法是通过注解
@JSONField (format="yyyy-MM-dd HH:mm:ss") public Date birthday;
另一种是通过SerializeConfig:
private static SerializeConfig mapping = new SerializeConfig(); private static String dateFormat; static { dateFormat = "yyyy-MM-dd HH:mm:ss"; mapping.put(Date.class, new SimpleDateFormatSerializer(dateFormat)); }
json字符串中使用单引号:
String text = JSON.toJSONString(object, SerializerFeature.UseSingleQuotes);
字段显示不同的key:
public class User { @JSONField(name="ID") public int getId() { ... } } User user = ...; JSON.toJSONString(user); // {"ID":001}
类的反序列化 JavaBean:
String text = ...; // {"r":255,"g":0,"b":0,"alpha":255} Color color = JSON.parseObject(text, Color.class);
数组:
String text = ...; // [{ ... }, { ... }] List<User> users = JSON.parseArray(text, User.class);
泛型:
String text = ...; // {"name":{"name":"ljw",age:18}} Map<String, User> userMap = JSON.parseObject(text, new TypeReference<Map<String, User>>() {});
自定义序列化代码示例:
public class JsonUtil { private static SerializeConfig mapping = new SerializeConfig(); private static String dateFormat; static { dateFormat = "yyyy-MM-dd HH:mm:ss"; } /** * 默认的处理时间 * * @param jsonText * @return */ public static String toJSON(Object jsonText) { return JSON.toJSONString(jsonText, SerializerFeature.WriteDateUseDateFormat); } /** * 自定义时间格式 * * @param jsonText * @return */ public static String toJSON(String dateFormat, String jsonText) { mapping.put(Date.class, new SimpleDateFormatSerializer(dateFormat)); return JSON.toJSONString(jsonText, mapping); } }
自定义反序列化示例:
先自定义一个日期解析类:
public class MyDateFormatDeserializer extends DateFormatDeserializer { private String myFormat; public MyDateFormatDeserializer(String myFormat) { super(); this.myFormat = myFormat; } @Override protected <Date> Date cast(DefaultJSONParser parser, Type clazz, Object fieldName, Object val) { if (myFormat == null) { return null; } if (val instanceof String) { String strVal = (String) val; if (strVal.length() == 0) { return null; } try { return (Date) new SimpleDateFormat(myFormat).parse((String)val); } catch (ParseException e) { throw new JSONException("parse error"); } } throw new JSONException("parse error"); } }
public class User { public String name; public int height; @JSONField(name = "com-google-com") public void setName(String name) { this.name = name; } @JSONField(format = "yyyy-MM/dd HH:mm:ss") public Date birthday; }
测试下:
/** * @param args * @throws IOException */ public static void main(String[] args) throws IOException, ParseException { String json = "{\"name\":\"22323\", \"age\": 1234," + " \"birthday\": \"2012-12/12 12:12:12\"}"; Test t = JSON.parseObject(json, Test.class, mapping, JSON.DEFAULT_PARSER_FEATURE, new Feature[0]); System.out.println(t.name); System.out.println(t.height); System.out.println(t.birthday); System.out.println( new SimpleDateFormat("yyyy-MM/dd HH:mm:ss").parse("2012-12/12 12:12:12")); }
总结:对于JSONField注解,好像只对序列号的格式有影响,反序列化不管这个,不知道为什么,只能自己写个解析类了,不过这样就更灵活了,可以在里面写很多处理逻辑,比如json字符串里面日期格式并不是标准格式的时候,就可以先转成标准格式再去解析了。
另外,fastjson的document官网一直打不开,不知道神马原因,难道被feng了麽:
http://code.alibabatech.com/wiki/display/FastJSON/Documentation
博客新地址:http://yidao620c.github.io
相关推荐
Fastjson支持自动类型转换,可以将JSON对象自动转化为对应的Java类型,如String、Integer、Date等,无需开发者手动进行类型转换。这种特性使得代码更加简洁,减少了出错的可能性。 四、JSONPath支持 Fastjson引入...
4. **类型转换**:Fastjson可以自动处理类型转换,如将数字字符串转为Number类型,日期字符串转为Date等。 **四、安全性** Fastjson在安全方面也做了很多工作,包括SQL注入防护、XSS防护等,以防止恶意输入导致的...
当应用程序处理不受信任的 JSON 输入时,攻击者可以通过精心构造的 JSON 字符串触发 RCE 漏洞,进而执行任意的系统命令,对服务器造成重大损害。远程代码执行是一种非常危险的漏洞,因为它允许攻击者在受害者的系统...
5. **类型转换**:Fastjson可以自动进行类型转换,例如,将数字字符串转换为Integer,日期字符串转换为Date,无需手动处理。 6. **兼容性**:Fastjson与Java平台兼容性好,支持Java SE、Android以及J2EE环境。 在...
相较于其他同类型的工具如Jackson和Gson,FastJSON以其卓越的速度和效率著称,尤其在大数据量处理场景下优势明显。 - **特性**: - **高速度**:FastJSON通过优化算法设计实现了快速的序列化和反序列化过程。 - *...
- **高速度**:Fastjson的性能在同类JSON库中名列前茅,其高效的解析和生成算法使得处理大量JSON数据时能保持快速响应。 - **轻量级**:Fastjson无需额外依赖,jar包小巧,易于集成到项目中。 - **丰富的API**:...
Fastjson 是阿里巴巴开源的一款高性能的 JSON 序列化/反序列化库,旨在提供一个简单且快速的方式来处理 JSON 数据。它支持 Java 泛型、自定义序列化类、任意复杂对象以及预先存在的无法修改的对象。 #### 二、获取...
例如,它可以自动处理`java.util.Date`、`java.math.BigDecimal`等特殊类型的转换。 4. **流式解析与生成**:对于大数据量的JSON,Fastjson提供了流式解析和生成模式,可以有效地降低内存消耗。 5. **JSONPath支持...
2. **兼容性好**:FastJson对Java的各种数据类型都有良好的支持,包括Class、Collection、Map、Date、Enum等常见的Java数据类型。 3. **简单易用**:提供了一套简洁的API接口,便于开发者快速上手并实现JSON数据的...
Fastjson提供了强大的类型转换机制,可以自动处理基本类型的转换,如`String`到`Number`,`String`到`Date`等。 三、Fastjson性能优化 1. 使用`parseObject`与`toJSONString`的静态方法,避免频繁创建`JSON`实例。...
7. **JSON 格式化与压缩**:Fastjson 可以对 JSON 字符串进行格式化输出,使其更易读,同时也支持压缩 JSON 字符串,减少传输体积。 **源码分析** `fastjson-1.2.4-sources.jar` 包含了 Fastjson 的源代码,开发者...
- 解压`fastjson2_main.zip`,获取源码和示例,加深对FASTJSON2内部机制的理解。 总之,FASTJSON2作为Java开发中的强大工具,无论是在小规模应用还是大数据处理场景,都能提供高效的JSON操作方案。开发者应充分...
快速JSON(FastJson)是阿里巴巴开发的一个开源JSON解析库,主要用Java编写,适用于Java和Android平台。...无论是在服务器端处理请求响应,还是在Android应用中进行数据存储和传输,FastJson都是一个值得信赖的选择。
第一种情况是在处理从后台获取的数据时,我们需要对实体类中的日期字段进行格式化。在实体类中,我们可以在日期类型(如`Date`)的字段上添加`@JSONField`注解,指定日期格式。例如: ```java import ...
本篇文章主要介绍了两种处理Spring Boot中`@ResponseBody`转换JSON时Date类型的方法:Jackson和FastJson。 ### Jackson处理Date类型 Jackson是Spring Boot默认的JSON库,它提供了多种方式来格式化Date字段。 ####...
"强大"则是指FastJson不仅支持基本的数据类型,还支持JavaBean、Collection、Map、Date和enum等普通JDK类的转换。"零依赖"表明FastJson在实现上不依赖于除了JDK之外的任何其他类库。 在实际应用中,FastJson可以...
与JsonLib等其他JSON处理库相比,FastJSON虽然在某些高级特性上可能略显不足,但在基本的JSON对象与Java对象之间的转换上表现出色,因此受到了开发者的青睐。本文将详细介绍FastJSON的主要特性和使用方法。 ### 1. ...
2. **强大**:Fastjson支持Java的各种标准类型,包括但不限于Java Bean、Collection、Map、Date以及enum等,同时也支持自定义类的转换。 3. **零依赖**:Fastjson不依赖任何其他类库,只需JDK即可运行,降低了项目的...