下面列出了com.alibaba.fastjson.parser.JSONToken#LBRACKET 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* 读取字符串数组
*
* @param parser 解析器
* @param lexer 文法
* @param field 字段
*/
protected String[] parseStrings(final DefaultJSONParser parser, final JSONLexer lexer, final String field) {
String result[] = null;
switch (lexer.token()) {
case JSONToken.LBRACKET:
result = parser.parseObject(String[].class);
break;
case JSONToken.NULL:
lexer.nextToken();
break;
default:
throw new SerializerException("syntax error: invalid " + field);
}
return result;
}
private void _quickNextToken(Context context, MethodVisitor mw, int token) {
Label quickElse_ = new Label(), quickEnd_ = new Label();
mw.visitVarInsn(ALOAD, context.var("lexer"));
mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "getCurrent", "()C");
if (token == JSONToken.LBRACE) {
mw.visitVarInsn(BIPUSH, '{');
} else if (token == JSONToken.LBRACKET) {
mw.visitVarInsn(BIPUSH, '[');
} else {
throw new IllegalStateException();
}
mw.visitJumpInsn(IF_ICMPNE, quickElse_);
mw.visitVarInsn(ALOAD, context.var("lexer"));
mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "next", "()C");
mw.visitInsn(POP);
mw.visitVarInsn(ALOAD, context.var("lexer"));
mw.visitLdcInsn(token);
mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "setToken", "(I)V");
mw.visitJumpInsn(GOTO, quickEnd_);
mw.visitLabel(quickElse_);
mw.visitVarInsn(ALOAD, context.var("lexer"));
mw.visitLdcInsn(token);
mw.visitMethodInsn(INVOKEVIRTUAL, JSONLexerBase, "nextToken", "(I)V");
mw.visitLabel(quickEnd_);
}
public int getFastMatchToken() {
return JSONToken.LBRACKET;
}
public int getFastMatchToken() {
return JSONToken.LBRACKET;
}
public int getFastMatchToken() {
return JSONToken.LBRACKET;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
protected static void parseArray(Collection collection, //
ObjectDeserializer deser, //
DefaultJSONParser parser, //
Type type, //
Object fieldName) {
final JSONLexerBase lexer = (JSONLexerBase) parser.lexer;
int token = lexer.token();
if (token == JSONToken.NULL) {
lexer.nextToken(JSONToken.COMMA);
token = lexer.token();
return;
}
if (token != JSONToken.LBRACKET) {
parser.throwException(token);
}
char ch = lexer.getCurrent();
if (ch == '[') {
lexer.next();
lexer.setToken(JSONToken.LBRACKET);
} else {
lexer.nextToken(JSONToken.LBRACKET);
}
if (lexer.token() == JSONToken.RBRACKET) {
lexer.nextToken();
return;
}
int index = 0;
for (;;) {
Object item = deser.deserialze(parser, type, index);
collection.add(item);
index++;
if (lexer.token() == JSONToken.COMMA) {
ch = lexer.getCurrent();
if (ch == '[') {
lexer.next();
lexer.setToken(JSONToken.LBRACKET);
} else {
lexer.nextToken(JSONToken.LBRACKET);
}
} else {
break;
}
}
token = lexer.token();
if (token != JSONToken.RBRACKET) {
parser.throwException(token);
}
ch = lexer.getCurrent();
if (ch == ',') {
lexer.next();
lexer.setToken(JSONToken.COMMA);
} else {
lexer.nextToken(JSONToken.COMMA);
}
// parser.accept(JSONToken.RBRACKET, JSONToken.COMMA);
}
public int getFastMatchToken() {
return JSONToken.LBRACKET;
}
public int getFastMatchToken() {
return JSONToken.LBRACKET;
}
public int getFastMatchToken() {
return JSONToken.LBRACKET;
}
public int getFastMatchToken() {
return JSONToken.LBRACKET;
}