Android开发 Json解析工具类一个类搞定Json的解析.docx

上传人:b****5 文档编号:14598604 上传时间:2023-06-24 格式:DOCX 页数:26 大小:19.94KB
下载 相关 举报
Android开发 Json解析工具类一个类搞定Json的解析.docx_第1页
第1页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第2页
第2页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第3页
第3页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第4页
第4页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第5页
第5页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第6页
第6页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第7页
第7页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第8页
第8页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第9页
第9页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第10页
第10页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第11页
第11页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第12页
第12页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第13页
第13页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第14页
第14页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第15页
第15页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第16页
第16页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第17页
第17页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第18页
第18页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第19页
第19页 / 共26页
Android开发 Json解析工具类一个类搞定Json的解析.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Android开发 Json解析工具类一个类搞定Json的解析.docx

《Android开发 Json解析工具类一个类搞定Json的解析.docx》由会员分享,可在线阅读,更多相关《Android开发 Json解析工具类一个类搞定Json的解析.docx(26页珍藏版)》请在冰点文库上搜索。

Android开发 Json解析工具类一个类搞定Json的解析.docx

Android开发Json解析工具类一个类搞定Json的解析

[Android开发]Json解析工具类,一个类搞定Json的解析

一、简介

利用递归的方式反射解析到bean里面

二、详细代码

1、Json格式

例如服务器指定规定json格式为:

{

"code":

"……",//返回代号,预留字段,默认返回null

"type":

"ERROR",//返回类型,表示操作是成功或失败

"desc":

"……",//返回描述,描述性文字,主要保存用于弹窗显示的文字

"action":

"SHOW",//返回操作,该操作值提供给终端使用,用于决定当前收到返回后的操作

"data":

"……"//返回数据,根据请求上传的参数,返回对应的数据,或返回null

}

对应的数据在data里面,data里面的key对应一个bean,例如一个列表数据:

{

"desc":

"查询成功",

"data":

{

"diseaseList":

[

{

"xmlName":

"精神病评估",

"xmlId":

"1066",

"category":

"symptom"

},

{

"xmlName":

"对学习困难和认知延迟的评估",

"xmlId":

"884",

"category":

"symptom"

},

{

"xmlName":

"疲乏的评估",

"xmlId":

"571",

"category":

"symptom"

},

{

"xmlName":

"痴呆的评估",

"xmlId":

"242",

"category":

"symptom"

},

{

"xmlName":

"非故意性体重减轻评估",

"xmlId":

"548",

"category":

"symptom"

}

]

},

"action":

null,

"code":

"",

"type":

"SUCCESS"

}

2、定义数据Bean类

上面的list的bean定义为DiseaseList.Java

publicclassDiseaseList{

/**

*xmlName:

分裂情感性障碍

*xmlId:

1199

*category:

disease

*/

privateStringxmlName;//症状名字

privateStringxmlId;//症状名字

privateStringcategory;//分类的英文名

privateStringletter="";//字母,转为拼音后在这里添加

publicStringgetXmlName(){

returnxmlName;

}

publicvoidsetXmlName(StringxmlName){

this.xmlName=xmlName;

}

publicStringgetXmlId(){

returnxmlId;

}

publicvoidsetXmlId(StringxmlId){

this.xmlId=xmlId;

}

publicStringgetCategory(){

returncategory;

}

publicvoidsetCategory(Stringcategory){

this.category=category;

}

publicStringgetLetter(){

returnletter;

}

publicvoidsetLetter(Stringletter){

this.letter=letter;

}

}

3、定义根key的bean类

Response.java:

/**

*json返回的首key的内容类

*

*/

publicclassResponse{

//下面四个是固定写在第一层的

privateStringcode;

privateStringtype;

privateStringdesc;

privateStringaction;

//Object可以存放list

privateHashMapdatas=newHashMap();//存放对象(一般是list),根据String这个id来取

//存放data里面的基本类型

privateHashMapdataValue=newHashMap<>();

publicResponse(){

code=type=desc=action/*=version=token=applyAuthenticateId*/="";

}

publicfinalstaticStringTOKEN="token";

publicfinalstaticStringVERSION="version";

publicfinalstaticStringPORTRAIT="portrait";

publicfinalstaticStringUSERID="userId";

publicfinalstaticStringAPPLYAUTHENTICATEID="applyAuthenticateId";

publicfinalstaticStringISDOCTOR="isDoctor";

publicfinalstaticStringISEXPERT="isExpert";

publicfinalstaticStringWAY="way";

publicfinalstaticStringDOWNLOAD="download";

/**

*存值到hashmap里面

*@paramkey

*@paramvalue

*/

publicvoidput(Stringkey,Objectvalue){

datas.put(key,value);

}

/**

*获取key对应的对象

*@paramkeykey

*@param返回的对象

*@returnhashMap的key对应的值

*/

publicTget(Stringkey){

if(datas.containsKey(key)){

return(T)datas.get(key);

}

returnnull;

}

/**

*反射执行,添加到hashMap,data里面的基本类型数据

*@paramkey

*@paramvalue

*/

publicvoidaddDataValue(Stringkey,Objectvalue){

dataValue.put(key,value);

}

/**

*获取data里面的基本类型数据

*@paramkey

*@param

*@return

*/

publicTgetDataValue(Stringkey){

if(dataValue.containsKey(key)){

return(T)dataValue.get(key);

}

returnnull;

}

publicStringgetCode(){

returncode;

}

publicvoidsetCode(Stringcode){

if(null!

=code&&!

"".equals(code.trim()))

this.code=code;

}

publicStringgetDesc(){

returndesc;

}

publicvoidsetDesc(Stringdesc){

if(!

TextUtils.isEmpty(desc))

this.desc=desc;

}

}

4、定义反射类枚举

json解析时候根据key在这里获取到对应的类实例

DATA.java:

/**

*json解析的时候的类

*/

publicenumDATA{

//疾病列表

DISEASELIST("diseaseList",DiseaseList.class)

;

privatefinalStringmId;

privatefinalClasscls;

publicClassgetClzss(){

returncls;

}

DATA(Stringid,Classclzss){

mId=id;

cls=clzss;

}

/**

*根据json的key获取类

*@paramid

*@return

*/

publicstaticDATAfromId(Stringid){

DATA[]values=values();

intcc=values.length;

for(inti=0;i

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

*/

publicstaticArrayListparseBeanArray(JSONArrayjsonarr,Classcls){

//声明集合List引用

ArrayList

展开阅读全文
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2