`

fastjson对Date的处理

    博客分类:
  • Java
阅读更多

对日期的序列化:

一种方法是通过注解

@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

 

分享到:
评论
1 楼 liuxiuhao 2019-07-02  
前端通过时间戳传递 也可以解决

相关推荐

    fastjson-1.2.5.rar

    Fastjson支持自动类型转换,可以将JSON对象自动转化为对应的Java类型,如String、Integer、Date等,无需开发者手动进行类型转换。这种特性使得代码更加简洁,减少了出错的可能性。 四、JSONPath支持 Fastjson引入...

    阿里巴巴fastjson的jar包

    4. **类型转换**:Fastjson可以自动处理类型转换,如将数字字符串转为Number类型,日期字符串转为Date等。 **四、安全性** Fastjson在安全方面也做了很多工作,包括SQL注入防护、XSS防护等,以防止恶意输入导致的...

    fastjson-1.2.58.rar

    当应用程序处理不受信任的 JSON 输入时,攻击者可以通过精心构造的 JSON 字符串触发 RCE 漏洞,进而执行任意的系统命令,对服务器造成重大损害。远程代码执行是一种非常危险的漏洞,因为它允许攻击者在受害者的系统...

    FastJsonJar包.zip

    5. **类型转换**:Fastjson可以自动进行类型转换,例如,将数字字符串转换为Integer,日期字符串转换为Date,无需手动处理。 6. **兼容性**:Fastjson与Java平台兼容性好,支持Java SE、Android以及J2EE环境。 在...

    fastJSON文档

    相较于其他同类型的工具如Jackson和Gson,FastJSON以其卓越的速度和效率著称,尤其在大数据量处理场景下优势明显。 - **特性**: - **高速度**:FastJSON通过优化算法设计实现了快速的序列化和反序列化过程。 - *...

    fastjson-1.2.7.jar

    - **高速度**:Fastjson的性能在同类JSON库中名列前茅,其高效的解析和生成算法使得处理大量JSON数据时能保持快速响应。 - **轻量级**:Fastjson无需额外依赖,jar包小巧,易于集成到项目中。 - **丰富的API**:...

    fastjson使用详解.md

    Fastjson 是阿里巴巴开源的一款高性能的 JSON 序列化/反序列化库,旨在提供一个简单且快速的方式来处理 JSON 数据。它支持 Java 泛型、自定义序列化类、任意复杂对象以及预先存在的无法修改的对象。 #### 二、获取...

    fastjson-1.2.5.jar

    例如,它可以自动处理`java.util.Date`、`java.math.BigDecimal`等特殊类型的转换。 4. **流式解析与生成**:对于大数据量的JSON,Fastjson提供了流式解析和生成模式,可以有效地降低内存消耗。 5. **JSONPath支持...

    FastJson应用案例.txt

    2. **兼容性好**:FastJson对Java的各种数据类型都有良好的支持,包括Class、Collection、Map、Date、Enum等常见的Java数据类型。 3. **简单易用**:提供了一套简洁的API接口,便于开发者快速上手并实现JSON数据的...

    fastjson使用

    Fastjson提供了强大的类型转换机制,可以自动处理基本类型的转换,如`String`到`Number`,`String`到`Date`等。 三、Fastjson性能优化 1. 使用`parseObject`与`toJSONString`的静态方法,避免频繁创建`JSON`实例。...

    fastjson-1.2.4

    7. **JSON 格式化与压缩**:Fastjson 可以对 JSON 字符串进行格式化输出,使其更易读,同时也支持压缩 JSON 字符串,减少传输体积。 **源码分析** `fastjson-1.2.4-sources.jar` 包含了 Fastjson 的源代码,开发者...

    FASTJSON2是一个性能优异的Java JSON库.zip

    - 解压`fastjson2_main.zip`,获取源码和示例,加深对FASTJSON2内部机制的理解。 总之,FASTJSON2作为Java开发中的强大工具,无论是在小规模应用还是大数据处理场景,都能提供高效的JSON操作方案。开发者应充分...

    fastJson用于格式的转换

    快速JSON(FastJson)是阿里巴巴开发的一个开源JSON解析库,主要用Java编写,适用于Java和Android平台。...无论是在服务器端处理请求响应,还是在Android应用中进行数据存储和传输,FastJson都是一个值得信赖的选择。

    springmvc fastjson 反序列化时间格式化方法(推荐)

    第一种情况是在处理从后台获取的数据时,我们需要对实体类中的日期字段进行格式化。在实体类中,我们可以在日期类型(如`Date`)的字段上添加`@JSONField`注解,指定日期格式。例如: ```java import ...

    spring boot @ResponseBody转换JSON 时 Date 类型处理方法【两种方法】

    本篇文章主要介绍了两种处理Spring Boot中`@ResponseBody`转换JSON时Date类型的方法:Jackson和FastJson。 ### Jackson处理Date类型 Jackson是Spring Boot默认的JSON库,它提供了多种方式来格式化Date字段。 ####...

    java使用FastJson解析Json数据

    "强大"则是指FastJson不仅支持基本的数据类型,还支持JavaBean、Collection、Map、Date和enum等普通JDK类的转换。"零依赖"表明FastJson在实现上不依赖于除了JDK之外的任何其他类库。 在实际应用中,FastJson可以...

    很好用的JAVA类转JSON工具:FastJSON (2).docx

    与JsonLib等其他JSON处理库相比,FastJSON虽然在某些高级特性上可能略显不足,但在基本的JSON对象与Java对象之间的转换上表现出色,因此受到了开发者的青睐。本文将详细介绍FastJSON的主要特性和使用方法。 ### 1. ...

    Java的JSON处理器fastjson使用方法详解

    2. **强大**:Fastjson支持Java的各种标准类型,包括但不限于Java Bean、Collection、Map、Date以及enum等,同时也支持自定义类的转换。 3. **零依赖**:Fastjson不依赖任何其他类库,只需JDK即可运行,降低了项目的...

Global site tag (gtag.js) - Google Analytics