package com.alibaba.json.bvt.parser;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.parser.JSONToken;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.json.bvtVO.ae.*;
import junit.framework.TestCase;
import java.lang.reflect.Type;
import java.util.Arrays;
/**
* Created by wenshao on 08/05/2017.
*/
public class AETest extends TestCase {
static String jsonData = "{\n" +
" \"areaList\":[\n" +
" {\n" +
" \"type\":\"floor\",\n" +
" \"name\":\"I'm floor\",\n" +
" \"children\":[{\n" +
" \"type\":\"item\",\n" +
" \"name\":\"I'm item 0\"\n" +
" },\n" +
" {\n" +
" \"type\":\"item\",\n" +
" \"name\":\"I'm item 1\"\n" +
" }\n" +
"\n" +
" ]\n" +
" },{\n" +
" \"type\":\"item\",\n" +
" \"name\":\"I'm item 2\"\n" +
" }\n" +
" ]\n" +
"}";
public void test_for_ae() throws Exception {
ParserConfig.getGlobalInstance().putDeserializer(Area.class, new ObjectDeserializer() {
public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
JSONObject jsonObject = (JSONObject) parser.parse();
String areaType;
if (jsonObject.get("type") instanceof String) {
areaType = (String) jsonObject.get("type");
} else {
return null;
}
if (Area.TYPE_FLOOR.equals(areaType)) {
return (T) JSON.toJavaObject(jsonObject, Floor.class);
} else if (Area.TYPE_ITEM.equals(areaType)) {
return (T) JSON.toJavaObject(jsonObject, Item.class);
}
return null;
}
public int getFastMatchToken() {
return JSONToken.LBRACE;
}
});
Data data = JSON.parseObject(jsonData, Data.class);
Item item = (Item) ((Floor)(data.areaList.get(0))).children.get(0);
}
}