package com.alibaba.fastjson.parser.deserializer; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONPObject; import com.alibaba.fastjson.parser.*; import java.lang.reflect.Type; /** * Created by wenshao on 21/02/2017. */ public class JSONPDeserializer implements ObjectDeserializer { public static final JSONPDeserializer instance = new JSONPDeserializer(); public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) { JSONLexerBase lexer = (JSONLexerBase) parser.getLexer(); SymbolTable symbolTable = parser.getSymbolTable(); String funcName = lexer.scanSymbolUnQuoted(symbolTable); lexer.nextToken(); int tok = lexer.token(); if (tok == JSONToken.DOT) { String name = lexer.scanSymbolUnQuoted(parser.getSymbolTable()); funcName += "."; funcName += name; lexer.nextToken(); tok = lexer.token(); } JSONPObject jsonp = new JSONPObject(funcName); if (tok != JSONToken.LPAREN) { throw new JSONException("illegal jsonp : " + lexer.info()); } lexer.nextToken(); for (;;) { Object arg = parser.parse(); jsonp.addParameter(arg); tok = lexer.token(); if (tok == JSONToken.COMMA) { lexer.nextToken(); } else if (tok == JSONToken.RPAREN) { lexer.nextToken(); break; } else { throw new JSONException("illegal jsonp : " + lexer.info()); } } tok = lexer.token(); if (tok == JSONToken.SEMI) { lexer.nextToken(); } return (T) jsonp; } public int getFastMatchToken() { return 0; } }