查看: 4867| 回复: 7
跳转到指定楼层
上一主题 下一主题
收起左侧

[题目讨论] 【诚心求教】parseJSON from Pocket Gems

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

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帖请教
烦请走过路过不要错过
一点点小思路 都万分感激!


上一篇:一道defragmentation的题目求解
下一篇:求推荐oop学习的一些课程,例子或者练习?
推荐
Rain 2016-4-27 05:51:48 | 只看该作者
全局:
想问下楼主 面完之后你感觉JSON这题面试官想要的考点在哪?你的Config的处理方法你感觉他认可吗?
回复

使用道具 举报

🔗
beer 2016-2-28 23:24:09 | 只看该作者
全局:
https://github.com/ralfstx/minimal-json
这是别人写的一个简易JSON parser,感觉和题目这个差不多。可以读一下他的代码,都有comments的。
不同的是,题目中要求放在map中,代码里是放在一个JsonArray里。但是parse JSON的思路都一样的。

评分

参与人数 1大米 +15 收起 理由
xz28us + 15

查看全部评分

回复

使用道具 举报

🔗
LBS 2016-2-29 01:46:06 | 只看该作者
全局:
顶一下!感谢楼上分享
回复

使用道具 举报

🔗
LBS 2016-2-29 05:04:34 | 只看该作者
全局:
beer 发表于 2016-2-28 23:24
https://github.com/ralfstx/minimal-json
这是别人写的一个简易JSON parser,感觉和题目这个差不多。可以 ...

多谢分享。但感觉这题难点主要在于如何设计CONFIG这个CLASS,让CONFIG能够帮我们自动决定如何选用合适的JSON PARSE的FUNCTION。
回复

使用道具 举报

全局:
Parse Json那道题需要自己写parse部分的代码吗,还是直接用JSONValue 就行了?
回复

使用道具 举报

🔗
hahaha666 2017-3-12 01:38:23 | 只看该作者
全局:
同文!!! 纠结好久。。。。
回复

使用道具 举报

🔗
huxuzi 2017-8-18 10:50:57 | 只看该作者
全局:
同问!这道题考了这么多年,居然并没有一个完整的解,看来真的是很难啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表