ANDROID JSON解析工具类,不需要第三方包,支持集合,直接贴代码。

[java] view plain copy
  1. importjava.lang.reflect.Array;
  2. importjava.lang.reflect.Field;
  3. importjava.lang.reflect.Method;
  4. importjava.lang.reflect.ParameterizedType;
  5. importjava.lang.reflect.Type;
  6. importjava.text.SimpleDateFormat;
  7. importjava.util.ArrayList;
  8. importjava.util.Collection;
  9. importjava.util.Date;
  10. importjava.util.HashMap;
  11. importjava.util.HashSet;
  12. importjava.util.Iterator;
  13. importjava.util.List;
  14. importjava.util.Locale;
  15. importjava.util.Map;
  16. importjava.util.Set;
  17. importorg.json.JSONArray;
  18. importorg.json.JSONException;
  19. importorg.json.JSONObject;
  20. importorg.json.JSONStringer;
  21. importandroid.util.Log;
  22. /**
  23. *@authorkeane
  24. *@version1.0
  25. *
  26. */
  27. publicclassJSONHelper{
  28. privatestaticStringTAG="JSONHelper";
  29. /**
  30. *将对象转换成Json字符串
  31. *@paramobj
  32. *@return
  33. */
  34. publicstaticStringtoJSON(Objectobj){
  35. JSONStringerjs=newJSONStringer();
  36. serialize(js,obj);
  37. returnjs.toString();
  38. }
  39. /**
  40. *序列化为JSON
  41. *@paramjs
  42. *@paramo
  43. */
  44. privatestaticvoidserialize(JSONStringerjs,Objecto){
  45. if(isNull(o)){
  46. try{
  47. js.value(null);
  48. }catch(JSONExceptione){
  49. e.printStackTrace();
  50. }
  51. return;
  52. }
  53. Class<?>clazz=o.getClass();
  54. if(isObject(clazz)){//对象
  55. serializeObject(js,o);
  56. }elseif(isArray(clazz)){//数组
  57. serializeArray(js,o);
  58. }elseif(isCollection(clazz)){//集合
  59. Collection<?>collection=(Collection<?>)o;
  60. serializeCollect(js,collection);
  61. }else{//单个值
  62. try{
  63. js.value(o);
  64. }catch(JSONExceptione){
  65. e.printStackTrace();
  66. }
  67. }
  68. }
  69. /**
  70. *序列化数组
  71. *@paramjs
  72. *@paramarray
  73. */
  74. privatestaticvoidserializeArray(JSONStringerjs,Objectarray){
  75. try{
  76. js.array();
  77. for(inti=0;i<Array.getLength(array);++i){
  78. Objecto=Array.get(array,i);
  79. serialize(js,o);
  80. }
  81. js.endArray();
  82. }catch(Exceptione){
  83. e.printStackTrace();
  84. }
  85. }
  86. /**
  87. *序列化集合
  88. *@paramjs
  89. *@paramcollection
  90. */
  91. privatestaticvoidserializeCollect(JSONStringerjs,Collection<?>collection){
  92. try{
  93. js.array();
  94. for(Objecto:collection){
  95. serialize(js,o);
  96. }
  97. js.endArray();
  98. }catch(Exceptione){
  99. e.printStackTrace();
  100. }
  101. }
  102. /**
  103. *序列化对象
  104. *@paramjs
  105. *@paramobj
  106. */
  107. privatestaticvoidserializeObject(JSONStringerjs,Objectobj){
  108. try{
  109. js.object();
  110. Class<?extendsObject>objClazz=obj.getClass();
  111. Method[]methods=objClazz.getDeclaredMethods();
  112. Field[]fields=objClazz.getDeclaredFields();
  113. for(Fieldfield:fields){
  114. try{
  115. StringfieldType=field.getType().getSimpleName();
  116. StringfieldGetName=parseMethodName(field.getName(),"get");
  117. if(!haveMethod(methods,fieldGetName)){
  118. continue;
  119. }
  120. MethodfieldGetMet=objClazz.getMethod(fieldGetName,newClass[]{});
  121. ObjectfieldVal=fieldGetMet.invoke(obj,newObject[]{});
  122. Stringresult=null;
  123. if("Date".equals(fieldType)){
  124. SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss",
  125. Locale.US);
  126. result=sdf.format((Date)fieldVal);
  127. }else{
  128. if(null!=fieldVal){
  129. result=String.valueOf(fieldVal);
  130. }
  131. }
  132. js.key(field.getName());
  133. serialize(js,result);
  134. }catch(Exceptione){
  135. continue;
  136. }
  137. }
  138. js.endObject();
  139. }catch(Exceptione){
  140. e.printStackTrace();
  141. }
  142. }
  143. /**
  144. *判断是否存在某属性的get方法
  145. *
  146. *@parammethods
  147. *@paramfieldGetMet
  148. *@returnboolean
  149. */
  150. publicstaticbooleanhaveMethod(Method[]methods,StringfieldMethod){
  151. for(Methodmet:methods){
  152. if(fieldMethod.equals(met.getName())){
  153. returntrue;
  154. }
  155. }
  156. returnfalse;
  157. }
  158. /**
  159. *拼接某属性的get或者set方法
  160. *@paramfieldName
  161. *@parammethodType
  162. *@return
  163. */
  164. publicstaticStringparseMethodName(StringfieldName,StringmethodType){
  165. if(null==fieldName||"".equals(fieldName)){
  166. returnnull;
  167. }
  168. returnmethodType+fieldName.substring(0,1).toUpperCase()
  169. +fieldName.substring(1);
  170. }
  171. /**
  172. *set属性的值到Bean
  173. *@paramobj
  174. *@paramvalMap
  175. */
  176. publicstaticvoidsetFieldValue(Objectobj,Map<String,String>valMap){
  177. Class<?>cls=obj.getClass();
  178. //取出bean里的所有方法
  179. Method[]methods=cls.getDeclaredMethods();
  180. Field[]fields=cls.getDeclaredFields();
  181. for(Fieldfield:fields){
  182. try{
  183. StringsetMetodName=parseMethodName(field.getName(),"set");
  184. if(!haveMethod(methods,setMetodName)){
  185. continue;
  186. }
  187. MethodfieldMethod=cls.getMethod(setMetodName,field
  188. .getType());
  189. Stringvalue=valMap.get(field.getName());
  190. if(null!=value&&!"".equals(value)){
  191. StringfieldType=field.getType().getSimpleName();
  192. if("String".equals(fieldType)){
  193. fieldMethod.invoke(obj,value);
  194. }elseif("Date".equals(fieldType)){
  195. SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss",Locale.US);
  196. Datetemp=sdf.parse(value);
  197. fieldMethod.invoke(obj,temp);
  198. }elseif("Integer".equals(fieldType)
  199. ||"int".equals(fieldType)){
  200. Integerintval=Integer.parseInt(value);
  201. fieldMethod.invoke(obj,intval);
  202. }elseif("Long".equalsIgnoreCase(fieldType)){
  203. Longtemp=Long.parseLong(value);
  204. fieldMethod.invoke(obj,temp);
  205. }elseif("Double".equalsIgnoreCase(fieldType)){
  206. Doubletemp=Double.parseDouble(value);
  207. fieldMethod.invoke(obj,temp);
  208. }elseif("Boolean".equalsIgnoreCase(fieldType)){
  209. Booleantemp=Boolean.parseBoolean(value);
  210. fieldMethod.invoke(obj,temp);
  211. }else{
  212. System.out.println("setFieldValuenotsuppertype:"+fieldType);
  213. }
  214. }
  215. }catch(Exceptione){
  216. continue;
  217. }
  218. }
  219. }
  220. /**
  221. *对象转Map
  222. *@paramobj
  223. *@return
  224. */
  225. publicstaticMap<String,String>getFieldValueMap(Objectobj){
  226. Class<?>cls=obj.getClass();
  227. Map<String,String>valueMap=newHashMap<String,String>();
  228. //取出bean里的所有方法
  229. Method[]methods=cls.getDeclaredMethods();
  230. Field[]fields=cls.getDeclaredFields();
  231. for(Fieldfield:fields){
  232. try{
  233. StringfieldType=field.getType().getSimpleName();
  234. StringfieldGetName=parseMethodName(field.getName(),"get");
  235. if(!haveMethod(methods,fieldGetName)){
  236. continue;
  237. }
  238. MethodfieldGetMet=cls.getMethod(fieldGetName,newClass[]{});
  239. ObjectfieldVal=fieldGetMet.invoke(obj,newObject[]{});
  240. Stringresult=null;
  241. if("Date".equals(fieldType)){
  242. SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss",Locale.CHINA);
  243. result=sdf.format((Date)fieldVal);
  244. }else{
  245. if(null!=fieldVal){
  246. result=String.valueOf(fieldVal);
  247. }
  248. }
  249. valueMap.put(field.getName(),result);
  250. }catch(Exceptione){
  251. continue;
  252. }
  253. }
  254. returnvalueMap;
  255. }
  256. /**
  257. *给对象的字段赋值
  258. *@paramobj
  259. *@paramfieldSetMethod
  260. *@paramfieldType
  261. *@paramvalue
  262. */
  263. publicstaticvoidsetFiedlValue(Objectobj,MethodfieldSetMethod,StringfieldType,Objectvalue){
  264. try{
  265. if(null!=value&&!"".equals(value)){
  266. if("String".equals(fieldType)){
  267. fieldSetMethod.invoke(obj,value.toString());
  268. }elseif("Date".equals(fieldType)){
  269. SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss",Locale.CHINA);
  270. Datetemp=sdf.parse(value.toString());
  271. fieldSetMethod.invoke(obj,temp);
  272. }elseif("Integer".equals(fieldType)
  273. ||"int".equals(fieldType)){
  274. Integerintval=Integer.parseInt(value.toString());
  275. fieldSetMethod.invoke(obj,intval);
  276. }elseif("Long".equalsIgnoreCase(fieldType)){
  277. Longtemp=Long.parseLong(value.toString());
  278. fieldSetMethod.invoke(obj,temp);
  279. }elseif("Double".equalsIgnoreCase(fieldType)){
  280. Doubletemp=Double.parseDouble(value.toString());
  281. fieldSetMethod.invoke(obj,temp);
  282. }elseif("Boolean".equalsIgnoreCase(fieldType)){
  283. Booleantemp=Boolean.parseBoolean(value.toString());
  284. fieldSetMethod.invoke(obj,temp);
  285. }else{
  286. fieldSetMethod.invoke(obj,value);
  287. Log.e(TAG,TAG+">>>>setFiedlValue->notsuppertype"+fieldType);
  288. }
  289. }
  290. }catch(Exceptione){
  291. Log.e(TAG,TAG+">>>>>>>>>>setvalueerror.",e);
  292. }
  293. }
  294. /**
  295. *反序列化简单对象
  296. *@paramjo
  297. *@paramclazz
  298. *@return
  299. *@throwsJSONException
  300. */
  301. publicstatic<T>TparseObject(JSONObjectjo,Class<T>clazz)throwsJSONException{
  302. if(clazz==null||isNull(jo)){
  303. returnnull;
  304. }
  305. Tobj=newInstance(clazz);
  306. if(obj==null){
  307. returnnull;
  308. }
  309. if(isMap(clazz)){
  310. setField(obj,jo);
  311. }else{
  312. //取出bean里的所有方法
  313. Method[]methods=clazz.getDeclaredMethods();
  314. Field[]fields=clazz.getDeclaredFields();
  315. for(Fieldf:fields){
  316. StringsetMetodName=parseMethodName(f.getName(),"set");
  317. if(!haveMethod(methods,setMetodName)){
  318. continue;
  319. }
  320. try{
  321. MethodfieldMethod=clazz.getMethod(setMetodName,f.getType());
  322. setField(obj,fieldMethod,f,jo);
  323. }catch(Exceptione){
  324. e.printStackTrace();
  325. }
  326. }
  327. }
  328. returnobj;
  329. }
  330. /**
  331. *反序列化简单对象
  332. *@paramjsonString
  333. *@paramclazz
  334. *@return
  335. *@throwsJSONException
  336. */
  337. publicstatic<T>TparseObject(StringjsonString,Class<T>clazz)throwsJSONException{
  338. if(clazz==null||jsonString==null||jsonString.length()==0){
  339. returnnull;
  340. }
  341. JSONObjectjo=null;
  342. jo=newJSONObject(jsonString);
  343. if(isNull(jo)){
  344. returnnull;
  345. }
  346. returnparseObject(jo,clazz);
  347. }
  348. /**
  349. *反序列化数组对象
  350. *@paramja
  351. *@paramclazz
  352. *@return
  353. */
  354. publicstatic<T>T[]parseArray(JSONArrayja,Class<T>clazz){
  355. if(clazz==null||isNull(ja)){
  356. returnnull;
  357. }
  358. intlen=ja.length();
  359. @SuppressWarnings("unchecked")
  360. T[]array=(T[])Array.newInstance(clazz,len);
  361. for(inti=0;i<len;++i){
  362. try{
  363. JSONObjectjo=ja.getJSONObject(i);
  364. To=parseObject(jo,clazz);
  365. array[i]=o;
  366. }catch(JSONExceptione){
  367. e.printStackTrace();
  368. }
  369. }
  370. returnarray;
  371. }
  372. /**
  373. *反序列化数组对象
  374. *@paramjsonString
  375. *@paramclazz
  376. *@return
  377. */
  378. publicstatic<T>T[]parseArray(StringjsonString,Class<T>clazz){
  379. if(clazz==null||jsonString==null||jsonString.length()==0){
  380. returnnull;
  381. }
  382. JSONArrayjo=null;
  383. try{
  384. jo=newJSONArray(jsonString);
  385. }catch(JSONExceptione){
  386. e.printStackTrace();
  387. }
  388. if(isNull(jo)){
  389. returnnull;
  390. }
  391. returnparseArray(jo,clazz);
  392. }
  393. /**
  394. *反序列化泛型集合
  395. *@paramja
  396. *@paramcollectionClazz
  397. *@paramgenericType
  398. *@return
  399. *@throwsJSONException
  400. */
  401. @SuppressWarnings("unchecked")
  402. publicstatic<T>Collection<T>parseCollection(JSONArrayja,Class<?>collectionClazz,
  403. Class<T>genericType)throwsJSONException{
  404. if(collectionClazz==null||genericType==null||isNull(ja)){
  405. returnnull;
  406. }
  407. Collection<T>collection=(Collection<T>)newInstance(collectionClazz);
  408. for(inti=0;i<ja.length();++i){
  409. try{
  410. JSONObjectjo=ja.getJSONObject(i);
  411. To=parseObject(jo,genericType);
  412. collection.add(o);
  413. }catch(JSONExceptione){
  414. e.printStackTrace();
  415. }
  416. }
  417. returncollection;
  418. }
  419. /**
  420. *反序列化泛型集合
  421. *@paramjsonString
  422. *@paramcollectionClazz
  423. *@paramgenericType
  424. *@return
  425. *@throwsJSONException
  426. */
  427. publicstatic<T>Collection<T>parseCollection(StringjsonString,Class<?>collectionClazz,
  428. Class<T>genericType)throwsJSONException{
  429. if(collectionClazz==null||genericType==null||jsonString==null
  430. ||jsonString.length()==0){
  431. returnnull;
  432. }
  433. JSONArrayjo=null;
  434. try{
  435. jo=newJSONArray(jsonString);
  436. }catch(JSONExceptione){
  437. e.printStackTrace();
  438. }
  439. if(isNull(jo)){
  440. returnnull;
  441. }
  442. returnparseCollection(jo,collectionClazz,genericType);
  443. }
  444. /**
  445. *根据类型创建对象
  446. *@paramclazz
  447. *@return
  448. *@throwsJSONException
  449. */
  450. privatestatic<T>TnewInstance(Class<T>clazz)throwsJSONException{
  451. if(clazz==null)
  452. returnnull;
  453. Tobj=null;
  454. if(clazz.isInterface()){
  455. if(clazz.equals(Map.class)){
  456. obj=(T)newHashMap();
  457. }elseif(clazz.equals(List.class)){
  458. obj=(T)newArrayList();
  459. }elseif(clazz.equals(Set.class)){
  460. obj=(T)newHashSet();
  461. }else{
  462. thrownewJSONException("unknowninterface:"+clazz);
  463. }
  464. }else{
  465. try{
  466. obj=clazz.newInstance();
  467. }catch(Exceptione){
  468. thrownewJSONException("unknownclasstype:"+clazz);
  469. }
  470. }
  471. returnobj;
  472. }
  473. /**
  474. *设定Map的值
  475. *@paramobj
  476. *@paramjo
  477. */
  478. privatestaticvoidsetField(Objectobj,JSONObjectjo){
  479. try{
  480. @SuppressWarnings("unchecked")
  481. Iterator<String>keyIter=jo.keys();
  482. Stringkey;
  483. Objectvalue;
  484. @SuppressWarnings("unchecked")
  485. Map<String,Object>valueMap=(Map<String,Object>)obj;
  486. while(keyIter.hasNext()){
  487. key=(String)keyIter.next();
  488. value=jo.get(key);
  489. valueMap.put(key,value);
  490. }
  491. }catch(JSONExceptione){
  492. e.printStackTrace();
  493. }
  494. }
  495. /**
  496. *设定字段的值
  497. *@paramobj
  498. *@paramfieldSetMethod
  499. *@paramf
  500. *@paramjo
  501. */
  502. privatestaticvoidsetField(Objectobj,MethodfieldSetMethod,Fieldf,JSONObjectjo){
  503. Stringname=f.getName();
  504. Class<?>clazz=f.getType();
  505. try{
  506. if(isArray(clazz)){//数组
  507. Class<?>c=clazz.getComponentType();
  508. JSONArrayja=jo.optJSONArray(name);
  509. if(!isNull(ja)){
  510. Objectarray=parseArray(ja,c);
  511. setFiedlValue(obj,fieldSetMethod,clazz.getSimpleName(),array);
  512. }
  513. }elseif(isCollection(clazz)){//泛型集合
  514. //获取定义的泛型类型
  515. Class<?>c=null;
  516. TypegType=f.getGenericType();
  517. if(gTypeinstanceofParameterizedType){
  518. ParameterizedTypeptype=(ParameterizedType)gType;
  519. Type[]targs=ptype.getActualTypeArguments();
  520. if(targs!=null&&targs.length>0){
  521. Typet=targs[0];
  522. c=(Class<?>)t;
  523. }
  524. }
  525. JSONArrayja=jo.optJSONArray(name);
  526. if(!isNull(ja)){
  527. Objecto=parseCollection(ja,clazz,c);
  528. setFiedlValue(obj,fieldSetMethod,clazz.getSimpleName(),o);
  529. }
  530. }elseif(isSingle(clazz)){//值类型
  531. Objecto=jo.opt(name);
  532. if(o!=null){
  533. setFiedlValue(obj,fieldSetMethod,clazz.getSimpleName(),o);
  534. }
  535. }elseif(isObject(clazz)){//对象
  536. JSONObjectj=jo.optJSONObject(name);
  537. if(!isNull(j)){
  538. Objecto=parseObject(j,clazz);
  539. setFiedlValue(obj,fieldSetMethod,clazz.getSimpleName(),o);
  540. }
  541. }elseif(isList(clazz)){//列表
  542. //JSONObjectj=jo.optJSONObject(name);
  543. //if(!isNull(j)){
  544. //Objecto=parseObject(j,clazz);
  545. //f.set(obj,o);
  546. //}
  547. }else{
  548. thrownewException("unknowtype!");
  549. }
  550. }catch(Exceptione){
  551. e.printStackTrace();
  552. }
  553. }
  554. /**
  555. *设定字段的值
  556. *@paramobj
  557. *@paramf
  558. *@paramjo
  559. */
  560. privatestaticvoidsetField(Objectobj,Fieldf,JSONObjectjo){
  561. Stringname=f.getName();
  562. Class<?>clazz=f.getType();
  563. try{
  564. if(isArray(clazz)){//数组
  565. Class<?>c=clazz.getComponentType();
  566. JSONArrayja=jo.optJSONArray(name);
  567. if(!isNull(ja)){
  568. Objectarray=parseArray(ja,c);
  569. f.set(obj,array);
  570. }
  571. }elseif(isCollection(clazz)){//泛型集合
  572. //获取定义的泛型类型
  573. Class<?>c=null;
  574. TypegType=f.getGenericType();
  575. if(gTypeinstanceofParameterizedType){
  576. ParameterizedTypeptype=(ParameterizedType)gType;
  577. Type[]targs=ptype.getActualTypeArguments();
  578. if(targs!=null&&targs.length>0){
  579. Typet=targs[0];
  580. c=(Class<?>)t;
  581. }
  582. }
  583. JSONArrayja=jo.optJSONArray(name);
  584. if(!isNull(ja)){
  585. Objecto=parseCollection(ja,clazz,c);
  586. f.set(obj,o);
  587. }
  588. }elseif(isSingle(clazz)){//值类型
  589. Objecto=jo.opt(name);
  590. if(o!=null){
  591. f.set(obj,o);
  592. }
  593. }elseif(isObject(clazz)){//对象
  594. JSONObjectj=jo.optJSONObject(name);
  595. if(!isNull(j)){
  596. Objecto=parseObject(j,clazz);
  597. f.set(obj,o);
  598. }
  599. }elseif(isList(clazz)){//列表
  600. JSONObjectj=jo.optJSONObject(name);
  601. if(!isNull(j)){
  602. Objecto=parseObject(j,clazz);
  603. f.set(obj,o);
  604. }
  605. }else{
  606. thrownewException("unknowtype!");
  607. }
  608. }catch(Exceptione){
  609. e.printStackTrace();
  610. }
  611. }
  612. /**
  613. *判断对象是否为空
  614. *@paramobj
  615. *@return
  616. */
  617. privatestaticbooleanisNull(Objectobj){
  618. if(objinstanceofJSONObject){
  619. returnJSONObject.NULL.equals(obj);
  620. }
  621. returnobj==null;
  622. }
  623. /**
  624. *判断是否是值类型
  625. *@paramclazz
  626. *@return
  627. */
  628. privatestaticbooleanisSingle(Class<?>clazz){
  629. returnisBoolean(clazz)||isNumber(clazz)||isString(clazz);
  630. }
  631. /**
  632. *是否布尔值
  633. *@paramclazz
  634. *@return
  635. */
  636. publicstaticbooleanisBoolean(Class<?>clazz){
  637. return(clazz!=null)
  638. &&((Boolean.TYPE.isAssignableFrom(clazz))||(Boolean.class
  639. .isAssignableFrom(clazz)));
  640. }
  641. /**
  642. *是否数值
  643. *@paramclazz
  644. *@return
  645. */
  646. publicstaticbooleanisNumber(Class<?>clazz){
  647. return(clazz!=null)
  648. &&((Byte.TYPE.isAssignableFrom(clazz))||(Short.TYPE.isAssignableFrom(clazz))
  649. ||(Integer.TYPE.isAssignableFrom(clazz))
  650. ||(Long.TYPE.isAssignableFrom(clazz))
  651. ||(Float.TYPE.isAssignableFrom(clazz))
  652. ||(Double.TYPE.isAssignableFrom(clazz))||(Number.class
  653. .isAssignableFrom(clazz)));
  654. }
  655. /**
  656. *判断是否是字符串
  657. *@paramclazz
  658. *@return
  659. */
  660. publicstaticbooleanisString(Class<?>clazz){
  661. return(clazz!=null)
  662. &&((String.class.isAssignableFrom(clazz))
  663. ||(Character.TYPE.isAssignableFrom(clazz))||(Character.class
  664. .isAssignableFrom(clazz)));
  665. }
  666. /**
  667. *判断是否是对象
  668. *@paramclazz
  669. *@return
  670. */
  671. privatestaticbooleanisObject(Class<?>clazz){
  672. returnclazz!=null&&!isSingle(clazz)&&!isArray(clazz)&&!isCollection(clazz);
  673. }
  674. /**
  675. *判断是否是数组
  676. *@paramclazz
  677. *@return
  678. */
  679. publicstaticbooleanisArray(Class<?>clazz){
  680. returnclazz!=null&&clazz.isArray();
  681. }
  682. /**
  683. *判断是否是集合
  684. *@paramclazz
  685. *@return
  686. */
  687. publicstaticbooleanisCollection(Class<?>clazz){
  688. returnclazz!=null&&Collection.class.isAssignableFrom(clazz);
  689. }
  690. /**
  691. *判断是否是Map
  692. *@paramclazz
  693. *@return
  694. */
  695. publicstaticbooleanisMap(Class<?>clazz){
  696. returnclazz!=null&&Map.class.isAssignableFrom(clazz);
  697. }
  698. /**
  699. *判断是否是列表
  700. *@paramclazz
  701. *@return
  702. */
  703. publicstaticbooleanisList(Class<?>clazz){
  704. returnclazz!=null&&List.class.isAssignableFrom(clazz);
  705. }
  706. }

调用测试代码:

[java] view plain copy
  1. publicclassUser{
  2. privateStringname;
  3. privateStringpassword;
  4. publicStringgetName(){
  5. returnname;
  6. }
  7. publicvoidsetName(Stringname){
  8. this.name=name;
  9. }
  10. publicStringgetPassword(){
  11. returnpassword;
  12. }
  13. publicvoidsetPassword(Stringpassword){
  14. this.password=password;
  15. }
  16. }
  17. voidtestObj(){
  18. try{
  19. Useruser=newUser();
  20. user.setName("abcd");
  21. user.setPassword("123456");
  22. Useruser1=newUser();
  23. user.setName("abcdf");
  24. user.setPassword("1234567");
  25. StringjsonStrUser=JSONHelper.toJSON(user);//序列化
  26. UserjsonUser=JSONHelper.parseObject(jsonStrUser,User.class);//反序列化
  27. MapmapUser=JSONHelper.parseObject(jsonStrUser,HashMap.class);//反序列化
  28. ListsourceList=newArrayList<User>();
  29. sourceList.add(user);
  30. sourceList.add(user1);
  31. StringjsonStrUserList=JSONHelper.toJSON(sourceList);//序列化
  32. ListlistUser=(List)JSONHelper.parseCollection(jsonStrUserList,List.class,User.class);//反序列化
  33. }catch(JSONExceptione){
  34. e.printStackTrace();
  35. }
  36. }

更多相关文章

  1. android页面间传递对象
  2. Android 判断网络是否可用以及网络类型(WIFI,2G,3G,4G)
  3. 用Javascript判断访问来源操作系统, 设备, 浏览器类型
  4. Android O版本Call对象解析
  5. 将Android DHCPInfo 属性转换为int类型(使用BigInteger)
  6. FregServer进程,获取ServiceManager代理对象
  7. 2011.07.19——— android intent 传递list或者对象
  8. android intent.setType指定浏览本地多种类型的文件

随机推荐

  1. Android(安卓)上实现微信微博上的应用语
  2. android 中获取屏幕大小
  3. android BLE开发之UUID工具类
  4. Using Google Maps in Android
  5. android分组数据适配器demo
  6. Android文件上传
  7. 升级android studio3.0遇到的问题
  8. Android监听屏幕屏幕锁屏与解锁
  9. Android标题栏(titlebar)显示进度条
  10. XNetFile