最近公司开发项目中有用到JSON数据,需要解析,因为app开发用到了js的一些框架,从js那边传递过来的数据基本都是JSON数据类型,在Android这边就需要用到数据解析了。百度上面的解释:JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,简单地说,json就是一种特殊的数据格式。好了,进入正文.
android中对JSON数据的解析有两种办法:官方自带JSONObject,以及第三方开源库,如GSON,FastJson,Jackson.这里我们只介JSONObject和第三方GSON的使用。
1.GSON的使用
1.去github去下载jar包,目前下载的是gson-2.2.4这个版本:下载。
2.导入到自己项目,并且添加依赖:
,
3.因为JSON数据不是很好模拟,所以,下面以及之后我都用Java中String类型去转换Json数据演示。
2.使用详解
gson.jar包中有两个方法:toJson()是将Java中字符串转换成JSON字符串,fromJson()是将JSON字符串转换成Java字符串。
2.1转换字符串:
String name ="nanyin";
Gson gson = new Gson();
Log.i(TAG,"name:"+name);
Log.i(TAG,"jsonname:"+jsonname);//我们看一下json的打印信息:
可以看到jsonname带上了""号,这就是JSON数据的标志.然后我们将JSON字符串jsonname通过fromjson方法转换为String字符串。
String jsontostring = gson.fromJson(jsonname,String.class);
Log.i(TAG,"jsontostring:"+jsontostring+"jsontoage:"+jsontoage);//nanyin gson.fromJson(String json, Class<String>classOfT)这个方法,第一个参数是json字符串,第二个参数是一个类,对于基本数据类型来说,就是他对应的包装类,比如要讲一个json数据转换成int类型的数据,gson.fromJson(jsonage,Integer.class);后面传入的就应该是Integer.class类。 2.2对象转换 新建一个Student类,代码如下: public class Student {
private String name;
private int age;
private boolean sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
} 在activity中 Student stu =new Student();
stu.setName("南叔");
stu.setAge(19);
stu.setSex(true);
Gson gson = new Gson();
String jsonobject =gson.toJson(stu);
Log.i(TAG,jsonobject);//{"age":19,"name":"南叔","sex":true}打印信息在右边,就没有再贴图了,jsonobject就是json类型的数据,他表示的是一个对象,用GSON转化为String,同单个字符串一样,Student stu2 =gson.fromJson(jsonobject,Student.class);Log.i(TAG,"Gson解析对象stu2:"+stu.getName()+",age="+stu.getAge()+",sex="+stu.getSex());//Gson解析对象stu2:南叔,age=19,sex=true打印信息如上 2.JSONObject的使用 1.将json字符串转换为基本数据类型 Student stu =new Student();
stu.setName("南叔");
stu.setAge(19);
stu.setSex(true);
Gson gson = new Gson();
String jsonobject =gson.toJson(stu); JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(jsonobject);
String name =jsonObject.getString("name");
int age=Integer.parseInt(jsonObject.getString("age"));
boolean sex =Boolean.parseBoolean(jsonObject.getString("sex"));
Log.i(TAG,"name: "+name+",age: "+age+",sex: "+sex);//name: 南叔,age: 19,sex: true
} catch (JSONException e) {
e.printStackTrace();
} 2.将基本数据转换为JSON数据 public JSONObject getJson(String tojson){
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put(tojson, tojson);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonObject;
} 方法很简单,只是封装了一层,使用的时候直接new一个就可以了,再传递给JS那边.JSONObject a = getJson("nanyin");,需要注意的是,JSONObject是以键值对保存的,你取的时候要按照他对应的名称去取值。 那么,这篇就结束了,233333 源码下载 github