下面列出了com.alibaba.fastjson.parser.JSONToken#LITERAL_FLOAT 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@SuppressWarnings("unchecked")
public static <T> T deserialze(DefaultJSONParser parser) {
final JSONLexer lexer = parser.lexer;
if (lexer.token() == JSONToken.LITERAL_INT) {
BigDecimal decimalValue = lexer.decimalValue();
lexer.nextToken(JSONToken.COMMA);
return (T) decimalValue;
}
if (lexer.token() == JSONToken.LITERAL_FLOAT) {
BigDecimal val = lexer.decimalValue();
lexer.nextToken(JSONToken.COMMA);
return (T) val;
}
Object value = parser.parse();
return value == null //
? null //
: (T) TypeUtils.castToBigDecimal(value);
}
@SuppressWarnings("unchecked")
public <T> T deserialze(DefaultJSONParser parser, Type clazz, Object fieldName) {
final JSONLexer lexer = parser.lexer;
Long longObject;
try {
final int token = lexer.token();
if (token == JSONToken.LITERAL_INT) {
long longValue = lexer.longValue();
lexer.nextToken(JSONToken.COMMA);
longObject = Long.valueOf(longValue);
} else if (token == JSONToken.LITERAL_FLOAT) {
BigDecimal number = lexer.decimalValue();
longObject = TypeUtils.longValue(number);
lexer.nextToken(JSONToken.COMMA);
} else {
if (token == JSONToken.LBRACE) {
JSONObject jsonObject = new JSONObject(true);
parser.parseObject(jsonObject);
longObject = TypeUtils.castToLong(jsonObject);
} else {
Object value = parser.parse();
longObject = TypeUtils.castToLong(value);
}
if (longObject == null) {
return null;
}
}
} catch (Exception ex) {
throw new JSONException("parseLong error, field : " + fieldName, ex);
}
return clazz == AtomicLong.class //
? (T) new AtomicLong(longObject.longValue()) //
: (T) longObject;
}
@SuppressWarnings("unchecked")
public <T> T deserialze(DefaultJSONParser parser, Type clazz, Object fieldName) {
final JSONLexer lexer = parser.lexer;
final int token = lexer.token();
if (token == JSONToken.NULL) {
lexer.nextToken(JSONToken.COMMA);
return null;
}
Integer intObj;
try {
if (token == JSONToken.LITERAL_INT) {
int val = lexer.intValue();
lexer.nextToken(JSONToken.COMMA);
intObj = Integer.valueOf(val);
} else if (token == JSONToken.LITERAL_FLOAT) {
BigDecimal number = lexer.decimalValue();
intObj = TypeUtils.intValue(number);
lexer.nextToken(JSONToken.COMMA);
} else {
if (token == JSONToken.LBRACE) {
JSONObject jsonObject = new JSONObject(true);
parser.parseObject(jsonObject);
intObj = TypeUtils.castToInt(jsonObject);
} else {
Object value = parser.parse();
intObj = TypeUtils.castToInt(value);
}
}
} catch (Exception ex) {
throw new JSONException("parseInt error, field : " + fieldName, ex);
}
if (clazz == AtomicInteger.class) {
return (T) new AtomicInteger(intObj.intValue());
}
return (T) intObj;
}
public void extract(JSONPath path, DefaultJSONParser parser, Context context) {
JSONLexerBase lexer = (JSONLexerBase) parser.lexer;
JSONArray array;
if (context.object == null) {
context.object = array = new JSONArray();
} else {
array = (JSONArray) context.object;
}
for (int i = array.size(); i < propertyNamesHash.length; ++i) {
array.add(null);
}
// if (lexer.token() == JSONToken.LBRACKET) {
// lexer.nextToken();
// JSONArray array;
//
// array = new JSONArray();
// for (;;) {
// if (lexer.token() == JSONToken.LBRACE) {
// int index = lexer.seekObjectToField(propertyNamesHash);
// int matchStat = lexer.matchStat;
// if (matchStat == JSONLexer.VALUE) {
// Object value;
// switch (lexer.token()) {
// case JSONToken.LITERAL_INT:
// value = lexer.integerValue();
// lexer.nextToken();
// break;
// case JSONToken.LITERAL_STRING:
// value = lexer.stringVal();
// lexer.nextToken();
// break;
// default:
// value = parser.parse();
// break;
// }
//
// array.add(index, value);
// if (lexer.token() == JSONToken.RBRACE) {
// lexer.nextToken();
// continue;
// } else {
// lexer.skipObject();
// }
// } else {
// lexer.skipObject();
// }
// }
//
// if (lexer.token() == JSONToken.RBRACKET) {
// break;
// } else if (lexer.token() == JSONToken.COMMA) {
// lexer.nextToken();
// continue;
// } else {
// throw new JSONException("illegal json.");
// }
// }
//
// context.object = array;
// return;
// }
for_:
for (;;) {
int index = lexer.seekObjectToField(propertyNamesHash);
int matchStat = lexer.matchStat;
if (matchStat == JSONLexer.VALUE) {
Object value;
switch (lexer.token()) {
case JSONToken.LITERAL_INT:
value = lexer.integerValue();
lexer.nextToken(JSONToken.COMMA);
break;
case JSONToken.LITERAL_FLOAT:
value = lexer.decimalValue();
lexer.nextToken(JSONToken.COMMA);
break;
case JSONToken.LITERAL_STRING:
value = lexer.stringVal();
lexer.nextToken(JSONToken.COMMA);
break;
default:
value = parser.parse();
break;
}
array.set(index, value);
if (lexer.token() == JSONToken.COMMA) {
continue for_;
}
}
break;
}
}
public void extract(JSONPath path, DefaultJSONParser parser, Context context) {
JSONLexerBase lexer = (JSONLexerBase) parser.lexer;
JSONArray array;
if (context.object == null) {
context.object = array = new JSONArray();
} else {
array = (JSONArray) context.object;
}
for (int i = array.size(); i < propertyNamesHash.length; ++i) {
array.add(null);
}
// if (lexer.token() == JSONToken.LBRACKET) {
// lexer.nextToken();
// JSONArray array;
//
// array = new JSONArray();
// for (;;) {
// if (lexer.token() == JSONToken.LBRACE) {
// int index = lexer.seekObjectToField(propertyNamesHash);
// int matchStat = lexer.matchStat;
// if (matchStat == JSONLexer.VALUE) {
// Object value;
// switch (lexer.token()) {
// case JSONToken.LITERAL_INT:
// value = lexer.integerValue();
// lexer.nextToken();
// break;
// case JSONToken.LITERAL_STRING:
// value = lexer.stringVal();
// lexer.nextToken();
// break;
// default:
// value = parser.parse();
// break;
// }
//
// array.add(index, value);
// if (lexer.token() == JSONToken.RBRACE) {
// lexer.nextToken();
// continue;
// } else {
// lexer.skipObject();
// }
// } else {
// lexer.skipObject();
// }
// }
//
// if (lexer.token() == JSONToken.RBRACKET) {
// break;
// } else if (lexer.token() == JSONToken.COMMA) {
// lexer.nextToken();
// continue;
// } else {
// throw new JSONException("illegal json.");
// }
// }
//
// context.object = array;
// return;
// }
for_:
for (;;) {
int index = lexer.seekObjectToField(propertyNamesHash);
int matchStat = lexer.matchStat;
if (matchStat == JSONLexer.VALUE) {
Object value;
switch (lexer.token()) {
case JSONToken.LITERAL_INT:
value = lexer.integerValue();
lexer.nextToken(JSONToken.COMMA);
break;
case JSONToken.LITERAL_FLOAT:
value = lexer.decimalValue();
lexer.nextToken(JSONToken.COMMA);
break;
case JSONToken.LITERAL_STRING:
value = lexer.stringVal();
lexer.nextToken(JSONToken.COMMA);
break;
default:
value = parser.parse();
break;
}
array.set(index, value);
if (lexer.token() == JSONToken.COMMA) {
continue for_;
}
}
break;
}
}