json类型:
{
"desc": "success",
"datalist": [
{
"address": "上海",
"id": 1,
"name": "张三"
},
{
"address": "北京",
"id": 2,
"name": "李四"
}
],
"obj": {
"address": "上海",
"id": 1,
"name": "张三"
},
"code": "200"
}
工具类:
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
import com.weijie.app_user.test.JsonModel;
public class JsonConvert{
public static JsonModel json2obj(String jsonStr,Class<?> c)
{
JsonModel json=new JsonModel();
try {
JSONObject jsonObject1 = new JSONObject(jsonStr);
jsonObject=jsonObject1;
json.setContent(jsonObject1.getString("content"));
json.setRetCode(jsonObject1.getString("code"));
json.setRetDesc(jsonObject1.getString("desc"));
json.setRetValue(getObject(jsonObject, "obj", c));
json.setList(getList("datalist", c));
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
private static final String TAG = "jsonUtil";
private static JSONObject jsonObject;
private JsonConvert(String json)
{
Log.i(TAG, "json="+json);
jsonObject = getJsonObject(json);
if(jsonObject==null)
{
Log.e(TAG, "jsonobject is null");
}
}
public JsonConvert() {
super();
}
public static JsonConvert newJsonUtil(String json)
{
JsonConvert util = new JsonConvert(json);
return util;
}
/**
* get json object
* @param json json data
* @return JOSNObject
*/
public JSONObject getJsonObject(String json)
{
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(json);
} catch (JSONException e) {
Log.e(TAG, "create jsonobject exception");
e.printStackTrace();
}
return jsonObject;
}
/**
* get String data
* @param json json data
* @param key param
* @return String data
* @throws JSONException
*/
public String getString(String key) throws JSONException
{
if(jsonObject!= null)
{
return jsonObject.getString(key);
}else{
return null;
}
}
/**
* get String data
* @param json json data
* @param key param
* @return int data
* @throws JSONException
*/
public int getInt(String key) throws JSONException
{
if(jsonObject!= null)
{
return jsonObject.getInt(key);
}else{
return -1;
}
}
/**
* get Double data
* @param json json data
* @param key param
* @return double data
* @throws JSONException
*/
public double getDouble(String key) throws JSONException
{
if(jsonObject!= null)
{
return jsonObject.getDouble(key);
}else{
return -1;
}
}
/**
* This Method use in jsonObject get current class with object
* @param jsonObject
* @param c class
* @return object
* @throws Exception
*/
public Object getObject(Class<?> c) throws Exception
{
if(jsonObject!=null)
{
return getObject(c.getSimpleName().toLowerCase(),c);
}else{
return null;
}
}
/**
* This Method use in jsonObject get current class with object
* @param jsonObject
* @param key query key
* @param c class
* @return object
* @throws Exception
*/
public Object getObject(String key,Class<?> c) throws Exception
{
if(jsonObject!=null)
{
return getObject(jsonObject, key, c);
}else{
return null;
}
}
public Object getObject(JSONObject jsonObject,Class<?> c) throws Exception
{
return getObject(jsonObject, c.getSimpleName().toLowerCase(), c);
}
/**
* This Method use in jsonObject get current class with object
* @param jsonObject
* @param key query key
* @param c class
* @return object
* @throws Exception
*/
public static Object getObject(JSONObject jsonObject, String key,Class<?> c) throws Exception
{
Log.i(TAG,"key == " + key);
Object bean =null ;
if(jsonObject!=null)
{
JSONObject jo = null;
if(key!=null)
{
jo = jsonObject.getJSONObject(key);
}else{
jo = jsonObject;
}
if(jo!=null)
{
if(c.equals(null))
{
Log.e(TAG, "class is null");
bean = jo.get(key);
}else{
bean = c.newInstance();
Field[] fs = c.getDeclaredFields();
for (int i = 0; i < fs.length; i++) {
Field f = fs[i];
f.setAccessible(true);
Type type = f.getGenericType();
String value = jo.getString(f.getName());
Log.i(TAG,f.getName()+"="+value);
if(type.equals(int.class))
{
f.setInt(bean,Integer.valueOf(value));
}else if(type.equals(double.class)){
f.setDouble(bean, Double.valueOf(value));
}else{
f.set(bean,value);
}
}
}
}else{
Log.e(TAG, "in jsonobject not key ");
}
}else{
Log.e(TAG, "current param jsonobject is null");
}
return bean;
}
/**
* This method use in jsonObject get list object
* @param key list key
* @param objectKey object key
* @param c object
* @return list
* @throws Exception
*/
public static List<Object> getList(String key ,Class<?> c) throws Exception
{
List<Object> list = null;
if(jsonObject!=null)
{
JSONArray jsonArray = jsonObject.getJSONArray(key);
if(!jsonArray.isNull(0))
{
list = new ArrayList<Object>();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsObject = jsonArray.getJSONObject(i);
Object object = getObject(jsObject, null, c);
list.add(object);
}
}
}
return list;
}
/**
* Test class field value
* @param c
* @param classObject
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
public static String getFieldValue(Class<?> c,Object classObject) throws IllegalArgumentException, IllegalAccessException
{
StringBuffer sb = new StringBuffer();
Field[] fs = c.getFields();
for (int i = 0; i < fs.length; i++) {
String s = fs[i].getName()+"="+fs[i].get(classObject);
sb.append(s).append("\n");
}
// Log.e(TAG, sb.toString());
return sb.toString();
}
/*public String obj2Json(T obj)
{
return "";
}*/
}
JsonModel:
import java.util.List;
public class JsonModel {
private String code;
private String desc;
private String content;
private Object obj;
private List<Object> datalist;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public List<Object> getDatalist() {
return datalist;
}
public void setDatalist(List<Object> datalist) {
this.datalist = datalist;
}
}
Person.java:
public class Person {
private int id;
private String name;
private String address;
public Person() {
super();
}
public Person(int id, String name, String addrss) {
super();
this.id = id;
this.name = name;
this.address = addrss;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Person [addrss=" + address + ", id=" + id + ", name=" + name
+ "]";
}
}
在activity中测试:
String datastring="{\"code\":\"0000\",\"desc\":\"\u6210\u529f\",\"content\":\"3\",\"obj\":{\"address\":\"北京\",\"id\":2,\"name\":\"李四\"},
\"datalist\":[{\"address\":\"上海黄浦区\",\"id\":1001,\"name\":\"jack\"},{\"address\":\"上海闵行区\",\"id\":1002,\"name\":\"rose\"},
{\"address\":\"上海黄浦区\",\"id\":1003,\"name\":\"mick\"}]}";
JsonModel json=JsonConvert.json2obj(datastring, Person.class);
Log.i("content", json.getContent());
Log.i("code", json.getCode());
Log.i("desc", json.getDesc());
Person person=(Person) json.getObj();
try {
Log.i("name", person.getName());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
List<Object> aylist=json.getList();
for(Object per:aylist){
Person person1=(Person) per;
try {
Log.i("name", person1.getName());
Log.i("address", person1.getAddress());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}