android在与后台交互的时候经常需要解析数据和封装数据,本文讲述json数据解析为对象的过程和对象被封装为json数据的过程:
Object------------>json:
主要通过google提供Gson方法:
在使用Gson的时候还需要导入一个jar包
// 把对象转换成json数据
private String initJsons() {
String result = "";
List<Persion> list = new ArrayList<Persion>();
for (int i = 0; i < 5; i++) {
Persion persion = new Persion();
persion.setUsername("ii" + i);
persion.setPassword("pp" + i);
persion.setId(i);
list.add(persion);
}
Gson gson = new Gson();
result = gson.toJson(list);
return result;
}
private String initJson() {
String result = "";
Persion persion = new Persion();
persion.setUsername("111");
persion.setPassword("222");
persion.setId(1);
Gson gson = new Gson();
result = gson.toJson(persion);
return result;
}
json-------------->Object:
主要通过反射方式:
// 把json数据转换成对象
private Object initObject(@SuppressWarnings("rawtypes") Class cls,
String json) throws InstantiationException, IllegalAccessException,
JSONException {
Object obj = cls.newInstance();
JSONObject jsonObject = new JSONObject(json);
Field[] fields = cls.getDeclaredFields();
AccessibleObject.setAccessible(fields, true);
for (Field field : fields) {
String name = field.getName();
String fieldType = field.getType().getSimpleName();
if (!jsonObject.has(name)) {
continue;
}
if ("String".equals(fieldType)) {
field.set(obj, jsonObject.getString(name));
} else if ("int".equals(fieldType)) {
field.set(obj, jsonObject.getInt(name));
} else if ("double".equals(fieldType)) {
field.set(obj, jsonObject.getDouble(name));
} else if ("boolean".equals(fieldType)) {
field.set(obj, jsonObject.getBoolean(name));
}
}
return obj;
}