/src/main/java/com/alibaba/fastjson/parser/deserializer/TimeDeserializer.java
Java | 73 lines | 56 code | 17 blank | 0 comment | 19 complexity | 6c32e3d8fad18da7f3e4f3bc48207a2b MD5 | raw file
- package com.alibaba.fastjson.parser.deserializer;
- import java.lang.reflect.Type;
- import com.alibaba.fastjson.JSONException;
- import com.alibaba.fastjson.parser.DefaultJSONParser;
- import com.alibaba.fastjson.parser.JSONScanner;
- import com.alibaba.fastjson.parser.JSONToken;
- public class TimeDeserializer implements ObjectDeserializer {
- public final static TimeDeserializer instance = new TimeDeserializer();
- @SuppressWarnings("unchecked")
- public <T> T deserialze(DefaultJSONParser parser, Type clazz, Object fieldName) {
- JSONScanner lexer = (JSONScanner) parser.getLexer();
-
- if (lexer.token() == JSONToken.COMMA) {
- lexer.nextToken(JSONToken.LITERAL_STRING);
-
- if (lexer.token() != JSONToken.LITERAL_STRING) {
- throw new JSONException("syntax error");
- }
-
- lexer.nextTokenWithColon(JSONToken.LITERAL_INT);
-
- if (lexer.token() != JSONToken.LITERAL_INT) {
- throw new JSONException("syntax error");
- }
-
- long time = lexer.longValue();
- lexer.nextToken(JSONToken.RBRACE);
- if (lexer.token() != JSONToken.RBRACE) {
- throw new JSONException("syntax error");
- }
- lexer.nextToken(JSONToken.COMMA);
-
- return (T) new java.sql.Time(time);
- }
-
- Object val = parser.parse();
- if (val == null) {
- return null;
- }
- if (val instanceof java.sql.Time) {
- return (T) val;
- } else if (val instanceof Number) {
- return (T) new java.sql.Time(((Number) val).longValue());
- } else if (val instanceof String) {
- String strVal = (String) val;
- if (strVal.length() == 0) {
- return null;
- }
-
- long longVal;
- JSONScanner dateLexer = new JSONScanner(strVal);
- if (dateLexer.scanISO8601DateIfMatch()) {
- longVal = dateLexer.getCalendar().getTimeInMillis();
- } else {
- longVal = Long.parseLong(strVal);
- }
- return (T) new java.sql.Time(longVal);
- }
-
- throw new JSONException("parse error");
- }
- public int getFastMatchToken() {
- return JSONToken.LITERAL_INT;
- }
- }