歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java 不使用工具包把json更快的轉化為map

Java 不使用工具包把json更快的轉化為map

日期:2017/3/1 9:31:01   编辑:Linux編程

轉化成map,也有可能是list哦,當然如果你寫的不是符合json格式的數據當然會有錯誤。我這麼寫有點不好理解,關鍵是幾次出棧,當然可以封裝一個類專門來表示,限於篇幅就直接用map和list了

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

Stack<Map> maps=new Stack<Map>(); //用來表示多層的json對象
Stack<List> lists=new Stack<List>(); //用來表示多層的list對象
Stack<Boolean> islist=new Stack<Boolean>();//判斷是不是list
Stack<String> keys=new Stack<String>(); //用來表示多層的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

--------------------------------------分割線 --------------------------------------

Copyright © Linux教程網 All Rights Reserved