if(values[i].mId.equals(id)){
returnvalues[i];
}
}
returnnull;
}
@Override
publicStringtoString(){
returnmId;
}
}
5、Json解析工具类
对应的注释已经写到代码里面了
JsonResolveUtils.java
/**
*json解析工具类
*/
publicclassJsonResolveUtils{
privatestaticfinalStringSET="set";
privatestaticfinalStringPUT="put";
/**
*开始解析json字符串,解析为Response类bean形式
*
*@paramresponsejson字符串
*@paramclsResponse类class
*@param泛型,这里传递了Response
*@return
*/
publicstaticTparseJsonToResponse(Stringresponse,Classcls){
if(null!
=response){
try{
//构建JSONObject实例
JSONObjectjson=newJSONObject(response);
//JSONObject解析成具体Bean实例
Tentity=toResponse(json,cls);
returnentity;
}catch(JSONExceptione){
e.printStackTrace();
}catch(InstantiationExceptione){
e.printStackTrace();
}catch(IllegalAccessExceptione){
e.printStackTrace();
}catch(Exceptione){
e.printStackTrace();
}
}
returnnull;
}
/**
*JSONObject解析成ResponseBean实例
*
*@paramjsonjson对象
*@paramcls转换的对象,这里是Response
*@param转换的对象,这里是Response
*@return返回Response对象
*@throwsIllegalAccessException
*@throwsInstantiationException
*/
publicstaticTtoResponse(JSONObjectjson,Classcls)throwsIllegalAccessException,InstantiationException{
//声明一个Response实例
Tinstance=null;
if(null!
=json){
//获取根key
Iteratoriterator=json.keys();
//构建个实例ResponseBean
instance=cls.newInstance();
//开始遍历根key
while(iterator.hasNext()){
try{
Stringkey=iterator.next();//获取key
Objectvalue=json.get(key);//获取key对应的值
//值不为空
if(null!
=value){
if(!
key.equals("data")){
//不是data数据,直接为Response的Bean属性赋值
setter(instance,key,value);
}else{//解析data数据
if(valueinstanceofJSONObject){
//data数据是JSONObject开始解析json对象数据
parseJsonBean((JSONObject)value,instance);
}elseif(valueinstanceofJSONArray){
//data数据是JSONArray开始解析json数组数据
toBeanArray((JSONArray)value,instance);
}else{
//若都不是,直接为ResponseBean属性赋值
setter(instance,key,value);
}
}
}
}catch(Exceptione){
e.printStackTrace();
}
}//while(~)
}
returninstance;
}
/**
*解析单个JSON数据
*
*@paramjsonjson
*@paraminstanceBean实例
*@param
*/
publicstaticvoidparseJsonBean(JSONObjectjson,Tinstance){
//json不为空
if(null!
=json){
//获取json的keyiterator
Iteratoriterator=json.keys();
while(iterator.hasNext()){
//获取键值对
Stringkey=iterator.next();
Objectvalue=null;
try{
//获取值
value=json.get(key);
//value不为空
if(null!
=value){
//value为json对象则把json解析成具体的实例Bean
if(valueinstanceofJSONObject){
//获取对应的实例BeanClass
DATAclzss=DATA.fromId(key);
//不为空
if(null!
=clzss){
//把json解析成该实例Bean
Objectentity=toBean((JSONObject)value,clzss.getClzss());
//把当前Bean类缓存在上级Bean属性里
putter(instance,entity.getClass(),key,entity);
}
}elseif(valueinstanceofJSONArray){//value为json数据对象,则把jsonarray解析成ArrayList
//获取对应的实例BeanClass
DATAclzss=DATA.fromId(key);
if(null!
=clzss){
//把json解析成ArrayList
Objectentity=parseBeanArray((JSONArray)value,clzss.getClzss());
//把当前ArrayList缓存在上级Bean属性里
putter(instance,entity.getClass(),key,entity);
}
}else{
//都是不是,直接为上级Bean属性赋值
if(instanceinstanceofResponse){
//dada下面的标准类型的值设置进Respone的dataString
setDataString(instance,key,value.toString());
}else{
putter(instance,value.getClass(),key,value);
}
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
}
/**
*设置Response的dataString
*
*@paramobj
*@paramkey
*@paramvalue
*@param
*/
privatestaticvoidsetDataString(Objectobj,Stringkey,Stringvalue){
//值不为空
if(null==value)
return;
try{
//获取addDataString方法,参数1为方法名,2为类型
Methodmethod=obj.getClass().getMethod("addDataValue",String.class,Object.class);
//调用set方法赋值
method.invoke(obj,key,value);
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*解析JSON成具体实例Bean
*
*@paramjsonjson数据
*@paramcls要解析成为的实例
*@param返回实例
*@return
*@throwsIllegalAccessException
*@throwsInstantiationException
*/
publicstaticTtoBean(JSONObjectjson,Classcls)throwsIllegalAccessException,InstantiationException{
//声明实例引用
Tinstance=null;
//json不为空
if(null!
=json){
//获取jsonkey的迭代器;
Iteratoriterator=json.keys();
//构建实例Bean
instance=cls.newInstance();
//遍历jsonkey
while(iterator.hasNext()){
//获取键值对
Stringkey=iterator.next();
Objectvalue=null;
try{
value=json.get(key);
//value不为空
if(null!
=value){
//value为json对象则把json解析成具体的实例Bean
if(valueinstanceofJSONObject){
//获取对应的实例BeanClass
DATAclzss=DATA.fromId(key);
if(null!
=clzss){
//把json解析成该实例Bean
Objectentity=toBean((JSONObject)value,clzss.getClzss());
//把当前Bean类缓存在上级Bean属性里
putter(instance,entity.getClass(),key,entity);
}
}elseif(valueinstanceofJSONArray){//value为json数组对象,则把jsonarray解析成ArrayList
//获取对应的实例BeanClass
DATAclzss=DATA.fromId(key);
if(ull!
=clzss){
//把json解析成ArrayList
Objectentity=parseBeanArray((JSONArray)value,clzss.getClzss());
//把当前ArrayList缓存在上级Bean属性里
putter(instance,entity.getClass(),key,entity);
}
}else{
//都是不是,直接为上级Bean属性赋值
setter(instance,key,value);
}
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
returninstance;
}
/**
*解析json里面的json数组,例如专家列表
*
*@paramjsonarr
*@paramcls
*@param
*@return
*/
publicstaticArrayList
//声明集合List引用
ArrayList