Java 不使用工具包把json更快的转化为map
/**
*
* @param jsonstring
* @return
*/
@SuppressWarnings(“unchecked”)
public static Object json2Map(String jsonstring){
Stack
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
————————————–分割线 ——————————-