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;
}

————————————–分割线 ————————————–

Struts中异步传送XML和JSON类型的数据 http://www.linuxidc.com/Linux/2013-08/88247.htm

Linux下JSON库的编译及代码测试 http://www.linuxidc.com/Linux/2013-03/81607.htm

jQuery 获取JSON数据[$.getJSON方法] http://www.linuxidc.com/Linux/2013-03/81673.htm

用jQuery以及JSON包将表单数据转为JSON字符串 http://www.linuxidc.com/Linux/2013-01/77560.htm

在C语言中解析JSON配置文件 http://www.linuxidc.com/Linux/2014-05/101822.htm

————————————–分割线 ——————————-