最近公司开发项目中有用到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();
String jsonname =gson.toJson(name);//将Java中字符串转换成JSON字符串
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);//nanyingson.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