有时候需要用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;
}
我的网店,有劳各位参观参观 http://mrs-x.taobao.com/