/*
* Copyright 1999-2101 Alibaba Group.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.fastjson.parser;
import static com.alibaba.fastjson.parser.JSONLexer.EOI;
import static com.alibaba.fastjson.parser.JSONToken.EOF;
import static com.alibaba.fastjson.parser.JSONToken.ERROR;
import static com.alibaba.fastjson.parser.JSONToken.FALSE;
import static com.alibaba.fastjson.parser.JSONToken.LBRACE;
import static com.alibaba.fastjson.parser.JSONToken.LBRACKET;
import static com.alibaba.fastjson.parser.JSONToken.LITERAL_FLOAT;
import static com.alibaba.fastjson.parser.JSONToken.LITERAL_INT;
import static com.alibaba.fastjson.parser.JSONToken.LITERAL_STRING;
import static com.alibaba.fastjson.parser.JSONToken.NEW;
import static com.alibaba.fastjson.parser.JSONToken.NULL;
import static com.alibaba.fastjson.parser.JSONToken.RBRACKET;
import static com.alibaba.fastjson.parser.JSONToken.SET;
import static com.alibaba.fastjson.parser.JSONToken.TREE_SET;
import static com.alibaba.fastjson.parser.JSONToken.TRUE;
import java.io.Closeable;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.lang.reflect.WildcardType;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.deserializer.FieldDeserializer;
import com.alibaba.fastjson.parser.deserializer.IntegerDeserializer;
import com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer;
import com.alibaba.fastjson.parser.deserializer.ListResolveFieldDeserializer;
import com.alibaba.fastjson.parser.deserializer.LongDeserializer;
import com.alibaba.fastjson.parser.deserializer.MapResolveFieldDeserializer;
import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
import com.alibaba.fastjson.parser.deserializer.StringDeserializer;
import com.alibaba.fastjson.util.TypeUtils;
/**
* @author wenshao<[email protected]>
*/
public class DefaultJSONParser extends AbstractJSONParser implements Closeable {
protected final Object input;
protected final SymbolTable symbolTable;
protected ParserConfig config;
private final static Set<Class<?>> primitiveClasses = new HashSet<Class<?>>();
private String dateFormatPattern = JSON.DEFFAULT_DATE_FORMAT;
private DateFormat dateFormat;
protected final JSONLexer lexer;
protected ParseContext context;
private ParseContext[] contextArray = new ParseContext[8];
private int contextArrayIndex = 0;
private final List<ResolveTask> resolveTaskList = new ArrayList<ResolveTask>();
public final static int NONE = 0;
public final static int NeedToResolve = 1;
public final static int TypeNameRedirect = 2;
private int resolveStatus = NONE;
static {
primitiveClasses.add(boolean.class);
primitiveClasses.add(byte.class);
primitiveClasses.add(short.class);
primitiveClasses.add(int.class);
primitiveClasses.add(long.class);
primitiveClasses.add(float.class);
primitiveClasses.add(double.class);
primitiveClasses.add(Boolean.class);
primitiveClasses.add(Byte.class);
primitiveClasses.add(Short.class);
primitiveClasses.add(Integer.class);
primitiveClasses.add(Long.class);
primitiveClasses.add(Float.class);
primitiveClasses.add(Double.class);
primitiveClasses.add(BigInteger.class);
primitiveClasses.add(BigDecimal.class);
primitiveClasses.add(String.class);
}
public String getDateFomartPattern() {
return dateFormatPattern;
}
public DateFormat getDateFormat() {
if (dateFormat == null) {
dateFormat = new SimpleDateFormat(dateFormatPattern);
}
return dateFormat;
}
public void setDateFormat(String dateFormat) {
this.dateFormatPattern = dateFormat;
this.dateFormat = null;
}
public void setDateFomrat(DateFormat dateFormat) {
this.dateFormat = dateFormat;
}
public DefaultJSONParser(String input){
this(input, ParserConfig.getGlobalInstance(), JSON.DEFAULT_PARSER_FEATURE);
}
public DefaultJSONParser(final String input, final ParserConfig config){
this(input, new JSONScanner(input, JSON.DEFAULT_PARSER_FEATURE), config);
}
public DefaultJSONParser(final String input, final ParserConfig config, int features){
this(input, new JSONScanner(input, features), config);
}
public DefaultJSONParser(final char[] input, int length, final ParserConfig config, int features){
this(input, new JSONScanner(input, length, features), config);
}
public DefaultJSONParser(final JSONLexer lexer){
this(lexer, ParserConfig.getGlobalInstance());
}
public DefaultJSONParser(final JSONLexer lexer, final ParserConfig config){
this(null, lexer, config);
}
public DefaultJSONParser(final Object input, final JSONLexer lexer, final ParserConfig config){
this.lexer = lexer;
this.input = input;
this.config = config;
this.symbolTable = config.getSymbolTable();
lexer.nextToken(JSONToken.LBRACE); // prime the pump
}
public SymbolTable getSymbolTable() {
return symbolTable;
}
public String getInput() {
if (input instanceof char[]) {
return new String((char[]) input);
}
return input.toString();
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public final Object parseObject(final Map object, Object fieldName) {
final JSONLexer lexer = this.lexer;
if (lexer.token() != JSONToken.LBRACE && lexer.token() != JSONToken.COMMA) {
throw new JSONException("syntax error, expect {, actual " + lexer.tokenName());
}
ParseContext context = this.getContext();
try {
boolean setContextFlag = false;
for (;;) {
lexer.skipWhitespace();
char ch = lexer.getCurrent();
if (isEnabled(Feature.AllowArbitraryCommas)) {
while (ch == ',') {
lexer.next();
lexer.skipWhitespace();
ch = lexer.getCurrent();
}
}
boolean isObjectKey = false;
Object key;
if (ch == '"') {
key = lexer.scanSymbol(symbolTable, '"');
lexer.skipWhitespace();
ch = lexer.getCurrent();
if (
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
淘宝fastjson最有效率json转换 (161个子文件)
FastJsonMain.class 3KB
Welcome.class 3KB
.classpath 407B
fastjson-1.1.34.jar 262KB
fastjson-1.1.34.jar 262KB
DefaultJSONParser.java 47KB
JSONLexer.java 46KB
TypeUtils.java 36KB
SerializeWriter.java 35KB
JSON.java 21KB
ParserConfig.java 17KB
JSONSerializer.java 14KB
JavaBeanDeserializer.java 13KB
JSONScanner.java 13KB
DeserializeBeanInfo.java 13KB
MapDeserializer.java 12KB
Base64.java 12KB
JSONObject.java 11KB
JSONArray.java 9KB
FieldInfo.java 8KB
SymbolTable.java 8KB
JSONReader.java 8KB
JavaBeanSerializer.java 7KB
IOUtils.java 7KB
JSONReaderScanner.java 6KB
ListSerializer.java 6KB
ArrayDeserializer.java 6KB
ThrowableDeserializer.java 5KB
CharTypes.java 5KB
SerializeConfig.java 5KB
DateSerializer.java 5KB
MapSerializer.java 5KB
JSONWriter.java 5KB
ArrayListTypeFieldDeserializer.java 5KB
StackTraceElementDeserializer.java 5KB
ObjectFieldSerializer.java 5KB
FieldDeserializer.java 4KB
ObjectArraySerializer.java 4KB
AbstractDateDeserializer.java 4KB
JSONToken.java 4KB
CollectionSerializer.java 3KB
ThreadLocalCache.java 3KB
FieldSerializer.java 3KB
NumberDeserializer.java 3KB
IdentityHashMap.java 3KB
EnumDeserializer.java 3KB
FastJsonMain.java 3KB
ArraySerializer.java 3KB
BooleanFieldDeserializer.java 3KB
SerializerFeature.java 3KB
Welcome.java 3KB
DoubleSerializer.java 2KB
TimeDeserializer.java 2KB
CollectionDeserializer.java 2KB
SqlDateDeserializer.java 2KB
DoubleArraySerializer.java 2KB
FloatArraySerializer.java 2KB
Feature.java 2KB
SerialWriterStringEncoder.java 2KB
FloatSerializer.java 2KB
DefaultFieldDeserializer.java 2KB
EnumerationSeriliazer.java 2KB
JSONSerializerContext.java 2KB
InetSocketAddressDeserializer.java 2KB
LongFieldDeserializer.java 2KB
DateFormatSerializer.java 2KB
FilterUtils.java 2KB
DateDeserializer.java 2KB
AtomicIntegerArraySerializer.java 2KB
AtomicLongArraySerializer.java 2KB
IntegerFieldDeserializer.java 2KB
LongSerializer.java 2KB
BooleanDeserializer.java 2KB
ListResolveFieldDeserializer.java 2KB
TimestampDeserializer.java 2KB
BooleanArraySerializer.java 2KB
ShortArraySerializer.java 2KB
LongArraySerializer.java 2KB
BigDecimalSerializer.java 2KB
IntArraySerializer.java 2KB
JavaObjectDeserializer.java 2KB
IntegerDeserializer.java 2KB
ShortSerializer.java 2KB
ByteSerializer.java 2KB
BooleanSerializer.java 1KB
StringSerializer.java 1KB
StringFieldDeserializer.java 1KB
EnumSerializer.java 1KB
BigIntegerSerializer.java 1KB
NumberFieldSerializer.java 1KB
ByteArraySerializer.java 1KB
IntegerSerializer.java 1KB
CharacterSerializer.java 1KB
CharArrayDeserializer.java 1KB
BigDecimalDeserializer.java 1KB
ReferenceSerializer.java 1KB
Keywords.java 1KB
FloatDeserializer.java 1KB
JSONField.java 1KB
ReferenceDeserializer.java 1KB
共 161 条
- 1
- 2
华布斯
- 粉丝: 2
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页