`

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

 

分享到:
评论

相关推荐

    Android Studio解析JSON对象

    在Android Studio中解析JSON,通常使用的是`org.json`库,它包含两个主要类:`JSONObject`和`JSONArray`。`JSONObject`用于处理键值对,而`JSONArray`则处理有序的元素列表。 解析JSON对象的步骤如下: 1. **导...

    Android_JSON数据解析

    本篇将详细讲解如何在Android应用中解析JSON数据,主要涉及以下几个方面: 1. JSON基本结构 JSON由两种基本结构构成:对象(Object)和数组(Array)。对象是以花括号 `{}` 包围的键值对集合,键用双引号括起,如`...

    android常用json传值解析工具类

    本篇文章将详细介绍如何使用阿里巴巴的Fastjson库进行JSON操作,并封装成一个方便使用的工具类,以适应各种常见的传值需求。 Fastjson是阿里巴巴提供的一款Java语言编写的高性能功能完备的JSON库。它不仅能够快速地...

    老罗android 解析json数据源码

    本教程聚焦于老罗讲解的Android解析JSON数据的源码分析,这对于深入理解JSON处理以及优化应用程序性能至关重要。 首先,我们需要了解JSON的基本结构。JSON是一种基于键值对的格式,数据以键值对的形式存储,如{"key...

    json格式数据解析工具类

    在Java中,解析JSON数据时,通常有以下几种操作: 1. **反序列化**:将JSON字符串转换为Java对象。例如,上面的JSON可以转换为一个`Person`对象,其中包含一个`String`类型的"name"字段,一个`int`类型的"age"字段...

    Android 安卓 json解析

    或解析JSON数组: ```java JSONArray jsonArray = new JSONArray(jsonData); for (int i = 0; i (); i++) { JSONObject obj = jsonArray.getJSONObject(i); // 解析对象属性 } ``` ### 3. 在线JSON解析 在线JSON...

    Android读取本地json文件的方法(解决显示乱码问题)

    - **Android操作JSON格式数据**:Android提供了Gson库、org.json库等工具来解析和生成JSON数据。 - **Android数据库操作**:SQLite是Android内置的轻量级数据库,可以用于持久化数据。 - **Android Activity操作**:...

    Android解析json数据

    总结,Android解析JSON数据是常见的任务,开发者可以选择不同的库和方法来实现。理解JSON的结构,熟练使用解析库,以及妥善处理网络请求和异步操作,是提升Android开发能力的关键步骤。通过阅读给定的博客文章,可以...

    Android list转json工具类

    本篇文章将深入探讨如何在Android中实现一个将集合List转化为JSON字符串的工具类,以及在联网调接口时处理参数的方法。 首先,我们需要了解JSON的基本结构。JSON主要包含两种数据结构:对象(Object)和数组(Array...

    Android Studio解析JSON数组

    在这个场景中,我们将探讨如何在Android Studio中解析JSON数组,并将获取的数据展示在ListView上。这个过程对于任何初学者来说都是一个重要的学习点,因为它涉及到网络数据获取、JSON解析以及UI展示。 首先,我们...

    Android应用源码之Android 解析json_dome.zip

    1. **Gson库**:Google提供的Gson库是Android中解析JSON的常见工具。它可以将Java对象转换为JSON字符串,也可以将JSON字符串反序列化为Java对象。使用Gson,你可以轻松地处理复杂的JSON结构。 2. **JSONObject与...

    Android中Json数据解析

    在Android中,我们通常使用Google提供的Gson库或者org.json库来解析JSON数据。Gson库能够直接将JSON字符串转化为Java对象,反之亦然,非常方便。而org.json库提供了JSONObject和JSONArray类,可以手动解析和构建JSON...

    Android Studio下使用Google Gson解析Json数据示例

    本篇文章将详细介绍如何在Android Studio环境下使用Google Gson解析Json数据。 首先,我们需要在项目中引入Gson库。打开build.gradle模块文件,并在dependencies块中添加以下依赖: ```groovy dependencies { ...

    Android JSON数据的封装及解析

    为了提高代码的可复用性和可维护性,我们可以创建专门的工具类,提供封装和解析的静态方法。 1. **封装方法**:可以创建一个静态方法,接收一个Java对象,返回JSON字符串。 2. **解析方法**:对应地,创建一个方法...

    android之json和gson数据解析最完整的代码例子(包括各种样式的json数据)

    在Android中,我们通常使用`org.json`库或`com.google.gson`库来解析JSON数据。 1. `org.json`库:这是Android SDK自带的一个轻量级库,主要用于解析简单的JSON数据。 - JSONObject:表示一个JSON对象,可以通过`...

    最好用的Json工具.exe

    5. Android JSON操作:在Android中,可以使用`JSONObject`和`JSONArray`类来解析JSON数据,通过调用get()、opt()等方法获取键对应的值;也可以使用`GsonBuilder`或`ObjectMapper`(Jackson库)将JSON对象映射为...

    android中gson解析json数据例程

    本篇文章将详细介绍如何在Android应用中使用Gson库解析JSON数据,以便更好地理解这一关键知识点。 首先,我们要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...

    androidmap转json字符串、list转json字符串工具类.zip

    这两个工具类对于Android开发者来说非常实用,因为它们简化了Java对象与JSON格式之间的互换过程。 首先,让我们详细了解Map对象转JSON字符串。Map是一种键值对的数据结构,它允许我们通过一个键(key)来访问对应的...

    Android 封装的工具类

    这里提到的"Android 封装的工具类"涵盖了几种关键的模块,包括网络请求、数据库操作、数据加密以及JSON解析。以下是对这些工具类的详细介绍: 1. **网络请求工具类(HttpUtils.java)** 在Android应用中,我们常常...

    Android解析JSON数据

    以上就是Android解析JSON数据的一些常见方法。选择哪种方法主要取决于项目需求和个人偏好。在实际开发中,通常会结合使用这些库和工具,以实现高效且灵活的数据处理。记住,无论选择哪种方式,确保在处理网络数据时...

Global site tag (gtag.js) - Google Analytics