Android原生json类只提供了很简单的几个方法,也没有内置bean的操作,但是由于其实android原生,支持比较好。比如服务器端常用的json-lib这个库,在android上面就无法使用,原因是json-lib的依赖包commons-collection无法支持;
首先,最常用的方法:从json字符串中根据键名获取相对应的值:
1、new 一个JSONObject对象,构造里放入json字符串
2、用jsonOBject对象的getString("属性名“),getInt("属性名“),或者get("属性名")方法得到对应的值
JSONObject jsonObject;
try {
jsonObject = new JSONObject("{name:'jack',age:12}");
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
System.out.println(name+age);
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
如果我们想要把json字符串解析成一个java对应类的对象,就不能指望jsonObject里原生的方法了,不过我们可以继承jsonObject类并且添加一个方法,利用反射,将json字符串转化成对象,这个继承的类如下
package com.example.http_test;
import java.lang.reflect.Field;
import org.json.JSONObject;
public class SituJsonObject extends JSONObject {
public SituJsonObject(String jsonString) throws Exception{
super(jsonString);
}
/**
* 将一个json字符串转换成一个java类的实例
* @param cls
* @return
* @throws Exception
*/
public Object getBean(Class cls) throws Exception
{
//生成待输出的实例
Object obj = cls.newInstance();
//得到所有的成员变量
Field[] fs = cls.getDeclaredFields();
//对每个成员变量,从json字符串中取值,并且放到实例中
for (int i = 0; i < fs.length; i++) {
String name = fs[i].getName();
fs[i].setAccessible(true);//防止私有成员不能访问
//