package tpnet.lettersort.utils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import tpnet.lettersort.bean.DATA;
import tpnet.lettersort.bean.Response;
/**
* json解析工具类
*/
public class JsonResolveUtils {
private static final String SET = "set";
private static final String PUT = "put";
/**
* 开始解析json 字符串,解析为Response类bean形式
*
* @param response json字符串
* @param cls Response类class
* @param <T> 泛型,这里传递了Response
* @return
*/
public static <T> T parseJsonToResponse(String response, Class<T> cls) {
if (null != response) {
try {
// 构建JSONObject 实例
JSONObject json = new JSONObject(response);
// JSONObject 解析成具体Bean实例
T entity = toResponse(json, cls);
return entity;
} catch (JSONException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
/**
* JSONObject解析成Response Bean实例
*
* @param json json对象
* @param cls 转换的对象,这里是Response
* @param <T> 转换的对象,这里是Response
* @return 返回Response对象
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static <T> T toResponse(JSONObject json, Class<T> cls) throws IllegalAccessException, InstantiationException {
//声明一个Response实例
T instance = null;
if (null != json) {
// 获取根key
Iterator<String> iterator = json.keys();
//构建个实例Response Bean
instance = cls.newInstance();
//开始遍历根 key
while (iterator.hasNext()) {
try {
String key = iterator.next(); //获取key
Object value = json.get(key); //获取key对应的值
//值不为空
if (null != value) {
if (!key.equals("data")) {
//不是data数据,直接为Response的Bean属性赋值
setter(instance, key, value);
} else { // 解析data数据
if (value instanceof JSONObject) {
//data 数据是JSONObject 开始解析json对象数据
parseJsonBean((JSONObject) value, instance);
} else if (value instanceof JSONArray) {
//data 数据是JSONArray 开始解析json数组数据
toBeanArray((JSONArray) value, instance);
} else {
//若都不是,直接为ResponseBean属性赋值
setter(instance, key, value);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
} // while(~)
}
return instance;
}
/**
* 解析单个JSON数据
*
* @param json json
* @param instance Bean实例
* @param <T>
*/
public static <T> void parseJsonBean(JSONObject json, T instance) {
//json不为空
if (null != json) {
//获取json的key iterator
Iterator<String> iterator = json.keys();
while (iterator.hasNext()) {
//获取键值对
String key = iterator.next();
Object value = null;
try {
//获取值
value = json.get(key);
//value不为空
if (null != value) {
// value 为json对象 则把json解析成具体的实例Bean
if (value instanceof JSONObject) {
// 获取对应的实例Bean Class
DATA clzss = DATA.fromId(key);
//不为空
if (null != clzss) {
//把json解析成该实例Bean
Object entity = toBean((JSONObject) value, clzss.getClzss());
//把当前Bean类缓存在上级Bean属性里
putter(instance, entity.getClass(), key, entity);
}
} else if (value instanceof JSONArray) { //value 为json 数据对象,则把jsonarray解析成ArrayList<Bean>
// 获取对应的实例Bean Class
DATA clzss = DATA.fromId(key);
if (null != clzss) {
//把json解析成ArrayList<Bean>
Object entity = parseBeanArray((JSONArray) value, clzss.getClzss());
//把当前ArrayList<Bean>缓存在上级Bean属性里
putter(instance, entity.getClass(), key, entity);
}
} else {
//都是不是,直接为上级Bean属性赋值
if (instance instanceof Response) {
//dada下面的标准类型的值设置进Respone的dataString
setDataString(instance,key, value.toString());
} else {
putter(instance, value.getClass(), key, value);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
/**
* 设置Response的dataString
*
* @param obj
* @param key
* @param value
* @param <T>
*/
private static <T> void setDataString(Object obj, String key, String value) {
//值不为空
if (null == value)
return;
try {
//获取addDataString方法,参数1 为方法名,2为类型
Method method = obj.getClass().getMethod("addDataValue", String.class, Object.class);
//调用set方法赋值
method.invoke(obj, key, value);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 解析JSON成具体实例Bean
*
* @param json json数据
* @param cls 要解析成为的实例
* @param <T> 返回实例
* @return
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static <T> T toBean(JSONObject json, Class<T> cls) throws IllegalAccessException, InstantiationException {
//声明实例引用
T instance = null;
//json不为空
if (null != json) {
//获取json key 的迭代器;
Iterator<String> iterator = json.keys();
//构建实例Bean
instance = cls.newInstance();
//遍历json key
while (iterator.hasNext()) {
//获取键值对
String key = iterator.next();
Object value = nul
没有合适的资源?快使用搜索试试~ 我知道了~
android在项目快速实现字母排序功能完整demo
共36个文件
java:16个
xml:10个
png:5个
5星 · 超过95%的资源 需积分: 5 39 下载量 113 浏览量
2016-11-10
18:49:06
上传
评论 1
收藏 225KB RAR 举报
温馨提示
android快速实现字母排序功能完整demo,服务器返回json的解析,项目中的功能代码。 介绍看帖子:http://blog.csdn.net/niubitianping/article/details/53118656
资源推荐
资源详情
资源评论
收起资源包目录
android实现字母排序功能完整dmeo.rar (36个子文件)
lettersort
proguard-rules.pro 670B
lettersort.iml 12KB
src
test
java
tpnet
lettersort
ExampleUnitTest.java 410B
androidTest
java
tpnet
lettersort
ExampleInstrumentedTest.java 762B
main
res
mipmap-xxxhdpi
ic_launcher.png 10KB
drawable
sidebar_background.xml 185B
bmj_item_selector.xml 246B
mipmap-hdpi
ic_launcher.png 3KB
values
colors.xml 443B
strings.xml 76B
styles.xml 943B
dimens.xml 216B
mipmap-xxhdpi
ic_launcher.png 8KB
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xhdpi
ic_launcher.png 5KB
layout
item_bmj_letter_list.xml 1021B
activity_main.xml 1KB
values-w820dp
dimens.xml 364B
java
tpnet
lettersort
PinYinComparator.java 1KB
bean
DATA.java 852B
DiseaseList.java 1KB
Response.java 3KB
view
SideBar.java 5KB
FlippingLoadingDialog.java 929B
MainActivity.java 8KB
adapter
BMJLetterListAdapter.java 2KB
utils
PinYinUtils.java 2KB
JsonResolveUtils.java 15KB
ITask.java 2KB
DefaultConfigurationFactory.java 2KB
DensityUtil.java 3KB
ThreadPoolManager.java 2KB
AndroidManifest.xml 634B
libs
pinyin4j-2.5.0.jar 184KB
.gitignore 8B
build.gradle 956B
libs
共 36 条
- 1
资源评论
- sincerehui2016-11-12不错可以使用!
KeepStudya
- 粉丝: 828
- 资源: 93
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功