读取JSON所有元素的属性和值
??? 有时候需要用JAVA将JSON字符串中的所有元系属性和值解析出来,例如:
String sql="[{\"typeNo\":\"PTMM01\",\"typeValue\":\"1\"},{\"typeNo\":\"PTMM02\",\"typeValue\":\"2\"}]";
?
你需要得到[typeNo:PTMM01, typeValue:1, typeNo:PTMM02, typeValue:2 ]这种属性和值对应的集合。
?
/** * {读取JSON字符串的所有元素的属性和值,按此原理可以改造成功能更强大的JSON解析类} * @author wenfeng.xu * */public List convertJosnString(String str){List retVal=new ArrayList();String SYMBOL_OPEN_BRACE="{";String SYMBOL_CLOSE_BRACE="}";String SYMBOL_SINGLE_QUO_MARKS="\"";String SYMBOL_COLON=":";String SYMBOL_COMMA=",";String SYMBOL_OPEN_BRACKET="[";String SYMBOL_CLOSE_BRACKET="]";String PRE_SYMBOL_SINGLE_QUO_MARKS_0="PRE_SYMBOL_SINGLE_QUO_MARKS_0";//第一个单引号的索引String PRE_SYMBOL_SINGLE_QUO_MARKS_1="PRE_SYMBOL_SINGLE_QUO_MARKS_1";String PRE_SYMBOL_SINGLE_QUO_MARKS_2="PRE_SYMBOL_SINGLE_QUO_MARKS_2";String PRE_SYMBOL_SINGLE_QUO_MARKS_3="PRE_SYMBOL_SINGLE_QUO_MARKS_3";Map temMap=new HashMap();char[] temChar=str.toCharArray();for(int i=0;i<temChar.length;i++){if(temMap.get(PRE_SYMBOL_SINGLE_QUO_MARKS_3)==null){if(temChar[i]==SYMBOL_COLON.charAt(0)){temMap.put(SYMBOL_COLON,SYMBOL_COLON);}if(temChar[i]==SYMBOL_SINGLE_QUO_MARKS.charAt(0)){if(temMap.get(SYMBOL_SINGLE_QUO_MARKS)==null){temMap.put(SYMBOL_SINGLE_QUO_MARKS,i);}else{//如果已经存在一个单引号 if(temMap.get(SYMBOL_COLON)==null){//如果不存在冒号 temMap.put(PRE_SYMBOL_SINGLE_QUO_MARKS_0,Integer.parseInt(temMap.get(SYMBOL_SINGLE_QUO_MARKS).toString())+1); temMap.put(PRE_SYMBOL_SINGLE_QUO_MARKS_1,i); }else{ temMap.put(PRE_SYMBOL_SINGLE_QUO_MARKS_2,Integer.parseInt(temMap.get(SYMBOL_SINGLE_QUO_MARKS).toString())+1); temMap.put(PRE_SYMBOL_SINGLE_QUO_MARKS_3,i); } temMap.remove(SYMBOL_SINGLE_QUO_MARKS); }}}else{ int index_0=Integer.parseInt(temMap.get(PRE_SYMBOL_SINGLE_QUO_MARKS_0).toString()); int index_1=Integer.parseInt(temMap.get(PRE_SYMBOL_SINGLE_QUO_MARKS_1).toString()); int index_2=Integer.parseInt(temMap.get(PRE_SYMBOL_SINGLE_QUO_MARKS_2).toString()); int index_3=Integer.parseInt(temMap.get(PRE_SYMBOL_SINGLE_QUO_MARKS_3).toString()); String attr=str.substring(index_0,index_1); String value=str.substring(index_2,index_3); retVal.add(attr+":"+value); temMap.remove(PRE_SYMBOL_SINGLE_QUO_MARKS_0); temMap.remove(PRE_SYMBOL_SINGLE_QUO_MARKS_1); temMap.remove(PRE_SYMBOL_SINGLE_QUO_MARKS_2); temMap.remove(PRE_SYMBOL_SINGLE_QUO_MARKS_3); temMap.remove(SYMBOL_COLON);}}return retVal;}
?
?
?