| 成's profile秀出美味PhotosBlogLists | Help |
|
秀出美味November 21 JSON简单操作 终于得空回来了,实验室的事情开始慢慢浮出水面了,隔三差五的做报告,可心里确想着一大堆开发的事情,真是一个乱啊。憋了几天终于憋不住了,把在项目中没时间做的事情之一给结束了。
在项目中,一直想要一个能对Json数据在Java中操作自如的方法,可是 Json-lib太大了,需要用的也就一两个类,于是决定抽空做一个自己用的着的。 思路: Json的形式和HashMap比较相似,于是决定用一个继承自HashMap的类模拟Json的操作。 public class Json extends HashMap<String, Object>
添加函数则是利用了父类提供的功能:
public void add(String key, Object value) throws UtilException{
if(!this.containsKey(key)) this.put(key, value); else throw new UtilException("Already have this key."); } 最重要的还是对字符串的解析,这里采用了遍历字符的做法,而非一个简单的split函数调用。
public Json(String json) throws UtilException{
if(json == null || json.trim().length() == 0 || json.trim().length() == 2) throw new UtilException("Bad json structure."); // 空或者形如{}的结构 json = json.substring(1,json.length() -1); char[] chars = json.toCharArray(); for(int i = 0,n = chars.length; i < n;){ StringBuffer sbKey = new StringBuffer(); while(chars[i] != ':' && i < n) { if(chars[i] != '\'') sbKey.append(chars[i]); i ++; } if(chars[i] == ':'){ StringBuffer sb = new StringBuffer(); int j = i+1; if(j < n && chars[j] == '{') { //含有子JSON结构如,{'age':'18','third':{'lalala':'test','salary':'4000'},'name':'Jay','second':{'salary':'300'}} int count = 0; //j++; while( j < n && (chars[j]!= '}' || count > 1)) { if(chars[j] == '{') count ++; if(chars[j] == '}') count --; sb.append(chars[j]); j++; } if(j == n) throw new UtilException("Bad json structure."); sb.append(chars[j]); this.add(sbKey.toString(), new Json(sb.toString())); i = j+1; while( i < n && chars[i]== ',') i++; }else if(j < n && chars[j] == '['){ // 含有array结构,转化为List ,{nameList:['Jay','herry',vincent]} int count = 0; while(j < n && (chars[j] != ']' || count > 1)){ if(chars[j] == '[') count ++; if(chars[j] == ']') count --; sb.append(chars[j]); j++; } if(j == n) throw new UtilException("Bad json structure for array"); sb.append(chars[j]); this.add(sbKey.toString(), buildList(sb.toString())); i = j+1; while( i < n && chars[i]== ',') i++; } else if (j < n){ while(j < n){ if(chars[j] != '\'') sb.append(chars[j]); if(j < n - 1 && chars[j+1] == ',') { this.add(sbKey.toString(), sb.toString()); i= j+2; break; } else if(j == n-1) { this.add(sbKey.toString(), sb.toString()); i= j+1; break; } j++; } } } } } 生成JSON string以方便客户端操作的方法 为:
public String toString() {
StringBuffer sb = new StringBuffer(); sb.append("{"); boolean first = true; for(Iterator<Map.Entry<String, Object>> it = this.entrySet().iterator();it.hasNext();){ Map.Entry<String, Object> me = it.next(); Object temp = me.getValue(); if(!first) sb.append(","); else first = false; sb.append("'"+me.getKey()+"':"); if(temp instanceof String || temp.getClass().isPrimitive() || temp.getClass().getName().startsWith("java.lang")){ sb.append("'"+temp+"'"); } else if(temp instanceof Json) { sb.append(((Json)temp).toString()); } else { sb.append(temp.toString()); } } sb.append("}"); return sb.toString(); } 以下则是将[。。。]转换成java中的List结构:
private List<String> buildList(String value) {
List<String> result = new ArrayList<String>(); if(value == null || value.trim().length() < 2) return result; value = value.substring(1,value.length()-1); String[] members = value.split(","); for(int i = 0,n = members.length;i < n;i++){ String temp = members[i]; if(temp.startsWith("'")) result.add(temp.substring(1,temp.length()-1)); else result.add(temp); } return result; } 好了,除了对OBJECT进行反射还没完成外,基本 搞定已经能满足基本类型的 JSON结构支持。 April 12 中奖啦
终于该我发飙了,开点:kendal,heifeng,强哥,许jb,albert,天籁,志刚 March 22 Milestone 已经很久不上来了,差不多就快忘了这里是我的地盘。
这么长的时间过去了,我对自己的评价是烂泥巴。真的是完全没有方向的东碰西碰!算了,闲话少说先写一篇下棋到现在的经验吧,然后在重新做人。(主要是防止重操旧业时还能一挽狂澜
So, afterinhere are the precious tips:
1.对40的判断。菜鸟和高手的区别就是能否能够以最小代价试出40。菜鸟是喜欢用个大子跟个0来防守并试出40。但是这种方法太蠢了,当你知道它是40的时候,事实上它已经报销了。(0的作用)9宫是试出40的最好位置,当你用一个36或37更甚至于35非常凶狠的吃了中间一个子的时候,势必对手会怀疑这个子的实力,同时他当然是惧怕的。当你继续凶狠的吃掉一个子后,它就是40。(前提你必须知道该吃哪个子)。这个时候如果有子吃了你,那就是40,前提:他的39或38没亡在你的真40口下。
另外一个比较有效的方法是,当你对家在另一侧第一个子是38并与他对掉之后,你在这一侧用36吃,吃不掉就是40(2排内有效)。
2。40的反拟态
很多人喜欢用39,38或37来拟态40,它们貌似吃的很兄,其实都了解你给他吃的是什么子。比如:你跟他捧了个38,那么你这一带应该37最大,他从那边调个37或38过来一路横扫,于是你就把他当40了(被对家骂sb的时候来了)。一般明知你有0,40不会进来的。一旦有子很兄的杀进来不要怕,用你次大的子挡在前面,它就不会占到便宜了。当你最大的子没暴露的时候也可以用它。有些40窝在家里,外面用个吃了几个子的大子扫来扫去,于是你拼了老命把最大的拉到他家里去偷袭,呵呵。偷鸡不成反蚀一把米。
3。40的拟态。
我的原则当40或其它子可以同时吃一个子时,千万不要用40去吃。因为说不定他是个非常小的子,你吃完后就是40大逃亡时代了,或者永远呆在营里了。真40不要见子就吃,用假40追那些小子,并争取消灭它们。并要有目的地把大子往你真40地嘴边敢,呵呵,这里就需要智慧和技巧了——你要非常了解抓子地技巧。因为太多菜鸟喜欢拿个40拼命地追子,你走一步他走一步,好像是期待别人少走一步似的,结果往往是-在追赶的过程中家里的子被他收拾了个干净。因为他敢进到你家杀子,你40敢进他家杀子吗,不怕炸?
真的到了写的时候才发现自己是滔滔不绝啊!39,38,37,36,0,兵等等一大堆。为什么不能发表这方面的论文,我早是军棋系博导了,。。。。。 December 24 第一次懵了 12月23日,星期五下午3点10分。
和往常一样,我正站在北安线上。10分钟后,我发现了一个座位,但是前面也有个人,他却一动不动。我想他大概前面的站要下了吧,于是往前挺了一下(他也没让)。再看看他还是没有坐的意思,我急了,硬闯,坐了。10分钟后到站,下了,进了另一辆车,坐在车上3分钟,司机说车上客太少,换下一辆,于是又到另一辆。(这两辆车上我旁边都没有人),大概开了10分钟,发现钱包丢了,奶奶的急了(左翻右翻,把衣服脱下找)。结果有重大发现,我外套外左下口袋和内左上口袋连通了(皮夹处),都被刀片割开。
剩下的时间,我就呆在车上想是怎么一回事。经排查,作案时间在北安线上站着的十分钟里(仍不肯定)这是我第一次,摔个跟头还不知道为什么。我虽不那么聪明,但自认为还是比较又慧根的,所以可气的是自己被人家拌了,却全然不知。算了《天下无贼》再看几遍,看样子里面讲的是真的! December 21 暧昧 “暧昧让人受尽委屈”,这是杨丞琳这张专辑里面最有代表性的一句了。
这不得不让我想到,下棋的时候同门的暧昧所导致的错误。40吃对家,很信任的用一个38去拦,结果暧昧将38变成了炮灰。暧昧有时还是很有用的,37对40的暧昧足可以说明一切。37百依百顺地成为40的替身,掩护40一路过关斩将。棋如此,人生亦是如此!
是暧昧让我找到了理想,同样是暧昧让我变得毫无主见,与一生中的最珍惜插身而过,希望这是对某些同志的回答(你的疑惑我看到了^_^)。只有不失自我,才能活出完美的人生。 December 19 ContradictionEvery day, I will meet things that may not happen as I have expected. I take it as the contradiction in my life and have already been used to it. But now, there is a particular contradiction which has plied with me all these days.
Before being a graduate student, I decide that I would never waste my time forever, for I really want to live a splendid life and to be a successful student. But when the new term comes, I am still addicted to playing kriegspiel and lose my way to study again. When staying up in the bed every night, I would feel sorry for my game playing and make a great plan for the next day. However, it is usual that I will do the same thing in the next night. Because when the free time comes, I will say to myself that there’s so much time that I can spend a little in playing kriegspiel first and the rest on study. Actually, I am a lazy student and cannot control myself. Therefore, all the time has been spent in playing kriegspiel.
Now, I have stopped doing self-criticism and planning, and turn to analyze the contradiction. Because contradiction is prevalent every where, we cannot put it away in terms of the philosophy. The only thing we can do is to make good use of it. According to this, I divided my contradiction into two parts: games and study. Of course, they are contradictory, but I can put study as a leading factor. For example, when I have free time, I can study first instead of playing kriegspiel.
I am happy now, for I have found the solution to the problem, though it has even not been implemented.
PS: kriegspiel [German]< --- >军棋游戏 December 07 冬夜的哆嗦 呆在冰冷的宿舍里,接收着电脑的辐射,心里想着的确是要完成的任务。每次有空的时候,都是把时间浪费了,所以事情之多,也只是我自己所谓的而已。
自己的理想还在天上飘曳,我则生活在自己的水泡之中。想着想着,突然觉得云雀与麻雀那是天壤之别啊!我已经很久没有运动了,虽然知道自己总是有这个时间。在这个校区,可以做的事情莫非听讲座、体育运动、小吃,另外就是骑着车围着学校逛一圈,欣赏那清新的景色,心灵就净化的很快。当然最大的坏习惯也带进学校来了,图书馆的书那是进进出出,如果用速率标识那应该有1KB/S了,派上用场的也只有1%。
写这个的时候突然发现自己的生活很空洞,所以想到的只是自己颓废时所失去的,渐渐的也就对自己是“哀其不幸,怒其不争”了,就很难相信自己的水平了。现在正在看《京华烟云》,虽然只是开了个头,却也看出不少端倪。透过人物的映照,我可以发现自己所拥有的以及自己所需要的,也正是这部片子的引人之处吧(我的见解^_^)。 |
|
|||||||
|
|