设为首页 加入收藏

TOP

Java 不使用工具包把json更快的转化为map
2015-04-07 15:30:08 来源: 作者: 【 】 浏览:23
Tags:Java 使用 工具 包把 json 更快 化为 map

转化成map,也有可能是list哦,当然如果你写的不是符合json格式的数据当然会有错误。我这么写有点不好理解,关键是几次出栈,当然可以封装一个类专门来表示,限于篇幅就直接用map和list了


/**
*
?* @param jsonstring
?* @return
*/
@SuppressWarnings("unchecked")
public static Object json2Map(String jsonstring){


Stack maps=new Stack(); //用来表示多层的json对象
Stack lists=new Stack(); //用来表示多层的list对象
Stack islist=new Stack();//判断是不是list
Stack keys=new Stack(); //用来表示多层的key


String keytmp=null;
Object valuetmp=null;
StringBuilder builder=new StringBuilder();
char[] cs=jsonstring.toCharArray();


for (int i = 0; i < cs.length; i++) {


switch (cs[i]) {
case '{': //如果是{map进栈
maps.push(new HashMap());
islist.push(false);
break;
case ':'://如果是:表示这是一个属性建,key进栈
keys.push(builder.toString());
builder=new StringBuilder();
break;
case '[':
islist.push(true);
lists.push(new ArrayList());
break;
case ','://这是一个分割,因为可能是简单地string的键值对,也有可能是string=map
//的键值对,因此valuetmp 使用object类型;
//如果valuetmp是null 应该是第一次,如果value不是空有可能是string,那是上一个键值对,需要重新赋值
//还有可能是map对象,如果是map对象就不需要了


boolean listis=islist.peek();


if(builder.length()>0)
valuetmp=builder.toString();
builder=new StringBuilder();
if(!listis){
keytmp=keys.pop();
maps.peek().put(keytmp, valuetmp);
}else
lists.peek().add(valuetmp);


break;
case ']':
islist.pop();


if(builder.length()>0)
valuetmp=builder.toString();
builder=new StringBuilder();
lists.peek().add(valuetmp);
valuetmp=lists.pop();
break;
case '}':
islist.pop();
//这里做的和,做的差不多,只是需要把valuetmp=maps.pop();把map弹出栈
keytmp=keys.pop();


if(builder.length()>0)
valuetmp=builder.toString();


builder=new StringBuilder();
maps.peek().put(keytmp, valuetmp);
valuetmp=maps.pop();
break;
default:
builder.append(cs[i]);
break;
}


}
return valuetmp;
}


--------------------------------------分割线 --------------------------------------


--------------------------------------分割线 --------------------------------------


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SendMail带附件版本的Java实现 下一篇基于类型系统的面向对象编程语言Go

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: