注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
Pocket Gems的onsite有这样一道题
需要把给定的json class内容parse之后放入一个给定的Row class
题目要求是通过地里面经得来(感谢提供面经的盆友)
所以会有缺漏
请尽情YY......
上题目:
json格式
[
{type:"session", data:{player_id:89757, session_id:66055, name:"ergou", date:"2016-1-1HHMMSS"}},
{type:"purchase", data:{player_id:89757, session_id:66055, state:"success", date:"2016-1-2HHMMSS"}},
{type:"battle", data:{player_id:...., session_id:...., result:....}},
.....
]
整个json数组叫做events 其中的每一条记录叫做event
parse后需要存成以下class的实例
class Row {
String tableName;
Map<String, String> map;
}
tableName就是type的值,map就是data里面的key value pairs。
以下class是给定的(感觉此处有缺漏),是已经把json string处理完成得到的实例,所有json中的数据通过此实例得到
(个人感觉这些方法的参数是String key,比如我想让tableName = "session",我需要调用getAsString("tableName") 毕竟不止一个数据是string类型 所以需要输入key来加以判断)
class JSONValue {
String getAsString()
Long getAsLong()
Map getAsMap()
List getAsList()
....
}
需要实现的method接口是
List<Row> parseToDB(List<JSONValue> events, Config c) {}
这里Config类也是需要设计,用处在于,得到json中每个key对应的数据类型,从而调用JSONValue中的特定方法,来得到特定类型的值。
举个例子:player_id是89757,是个int,所以在存入Row里面的map时,就要调用JSONValue中的getInt()方法,然后也许再用个Integer.toString(int i)得到string类型,之后存入map。此时如果调用JSONValue中的其他方法,则无法得到正确结果。
我目前的思路是,把Config类当成一个字典。json中,每个key对应的数据类型,直接在config中存入。parse的时候,直接传入key,就能得到相应的类型。
例子:config里面有个set<String> stringSet 专门存放结果为String的key。就上例来说,stringSet中有个值是"name",因为name的数据类型是String。在我查找的时候,会有一个public String check(String s)的方法,在config中的不同set中查找s,if(this.stringSet.contains(s)) return "string"; 然后在我的接收端,if(c.check(key).equals("string")) {row.map.put(......)}。
不过感觉完全跟OOD扯不上边了。。。甚是郁闷
下周要onsite了 必考题没弄好比较捉鸡
遂po帖请教
烦请走过路过不要错过
一点点小思路 都万分感激!
|