Android解析Json工具类

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();
			}
		}

猜你喜欢

转载自chenzheng8975.iteye.com/blog/2036762
今日推荐