Android 解析Json的方式:底层做法、Gson、FastJson
2017-02-18 19:07
387 查看
上一篇博客写了Android如何解析XML,现在我就写写Android是怎么解析Json的。
同样,解析必定是要拿取传过来的数据的,那么Json数据又是怎么样的呢?
Json传过来的数据,要不是就是对象、要不是就是对象数组,而且写法 和XML是不一样的,格式:[] 数组、{} 对象。那我们来看看Json是如何解析的吧.
那么首先和解析XML一样,要获得网络数据,同时因为执行耗时操作也要使用线程间通信机制:假设服务器传过来的数据是一下格式
1、子线程+Handler
2、异步任务类AsyncTask
那我们就使用第二个,异步任务类AsyncTask,还要写一个onPostExecute方法
一、原生态做法(JsonArray和JsonObject)
二、Gson(谷歌),需要导入一个包,点击项目右击,选中Open Module setting,接着点击Dependencies选项卡,找到右上角有一个绿色的加号,点击它选择第一个,在输入框中搜索gson,然后选择它,点击OK,就可以了。
导完后还需要写两个类,Small和Big,也就是我们说的实体类
1、Small
2、Big
现在就可以解析了
三、FastJson(阿里巴巴),同样作为第三方解析工具,也要导包,直接放入libs下就可以了
到此,不要忘记了加权限
同样,解析必定是要拿取传过来的数据的,那么Json数据又是怎么样的呢?
Json传过来的数据,要不是就是对象、要不是就是对象数组,而且写法 和XML是不一样的,格式:[] 数组、{} 对象。那我们来看看Json是如何解析的吧.
那么首先和解析XML一样,要获得网络数据,同时因为执行耗时操作也要使用线程间通信机制:假设服务器传过来的数据是一下格式
1、子线程+Handler
2、异步任务类AsyncTask
那我们就使用第二个,异步任务类AsyncTask,还要写一个onPostExecute方法
class MyTask extends AsyncTask{ @Override protected Object doInBackground(Object[] objects) { //1、获取网络XML数据 //URLConnection try { URL url=new URL("http://192.168.43.81:8080/test.json"); HttpURLConnection connection=(HttpURLConnection)url.openConnection(); //设置请求方式 connection.setRequestMethod("GET"); //设置请求连接超时的时间(优化) connection.setConnectTimeout(5000); //结果码(成功:200,失败:404,304,500....) int code=connection.getResponseCode(); if(code==200){ //获取服务器返回过来的结果 InputStream is=connection.getInputStream(); // //打印(读) BufferedReader br=new BufferedReader(new InputStreamReader(is)); String str=null; StringBuffer stringBuffer=new StringBuffer(); while((str=br.readLine())!=null){ stringBuffer.append(str); } }
一、原生态做法(JsonArray和JsonObject)
//解析json JSONObject jsonObject=new JSONObject(stringBuffer.toString()); int list=jsonObject.getInt("list"); Log.i("test","长度:"+list); JSONArray jsonArray=jsonObject.getJSONArray("persons"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject object=jsonArray.getJSONObject(i); int pid=object.getInt("pid"); String pname=object.getString("pname"); int page=object.getInt("page"); Log.i("test",pid+" "+pname); }
二、Gson(谷歌),需要导入一个包,点击项目右击,选中Open Module setting,接着点击Dependencies选项卡,找到右上角有一个绿色的加号,点击它选择第一个,在输入框中搜索gson,然后选择它,点击OK,就可以了。
导完后还需要写两个类,Small和Big,也就是我们说的实体类
1、Small
package com.example.parsejson; import android.os.Parcel; import android.os.Parcelable; /** * Created by ASUS on 2017/2/18. */ public class Small implements Parcelable{ private int pid; private String pname; private int page; public Small() { } public Small(int pid, String pname, int page) { this.pid = pid; this.pname = pname; this.page = page; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } @Override public String toString() { return "Small{" + "pid=" + p 4000 id + ", pname='" + pname + '\'' + ", page=" + page + '}'; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeInt(pid); parcel.writeString(pname); parcel.writeInt(page); } public static final Parcelable.Creator<Small> CREATOR=new Parcelable.Creator<Small>(){ @Override public Small createFromParcel(Parcel parcel) { Small small=new Small(); small.setPid(parcel.readInt()); small.setPname(parcel.readString()); small.setPage(parcel.readInt()); return small; } @Override public Small[] newArray(int i) { return new Small[i]; } }; }
2、Big
package com.example.parsejson; import java.util.List; /** * Created by ASUS on 2017/2/18. */ public class Big { private int list; private List<Small> persons; public Big() { } public Big(int list, List<Small> persons) { this.list = list; this.persons = persons; } public int getList() { return list; } public void setList(int list) { this.list = list; } public List<Small> getPersons() { return persons; } public void setPersons(List<Small> persons) { this.persons = persons; } }
现在就可以解析了
Gson gson=new Gson(); Big big=gson.fromJson(stringBuffer.toString(),Big.class); Log.i("test",big.getList()+" "); List<Small> persons=big.getPersons(); for (Small person:persons) { Log.i("test",person.toString()); }
三、FastJson(阿里巴巴),同样作为第三方解析工具,也要导包,直接放入libs下就可以了
Big big=JSON.parseObject(stringBuffer.toString(),Big.class); Log.i("test",big.getList()+" "); List<Small> persons=big.getPersons(); for (Small person:persons) { Log.i("test",person.toString()); }
到此,不要忘记了加权限
*<uses-permission android:name="android.permission.INTERNET"></uses-permission>*
相关文章推荐
- Android中的JSON解析方式:json; Gson ; Fastjson
- Android中的JSON解析方式:json; Gson ; Fastjson
- 【Android】Gson-以类模板的方式解析复杂JSON
- android JSON解析:官方&GSON方式
- 解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题
- 解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题
- 解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题
- Android JSON数据解析(GSON方式)
- Android JSON数据解析(GSON方式)
- Android Gson官方推荐的json解析方式
- Android中发起网络访问的方式,以及Json、Gson的网络解析
- android Gson解析 (同json解析方式)
- Android中解析json数据的方式之一:Gson
- 解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题
- Android中的JSON解析方式:json; Gson ; Fastjson
- Android解析JSON方式(二) 客户端解析SON数据
- Android解析JSON方式
- Android 使用GSON解析JSON 并转换为JAVA对象
- Android解析JSON方式 服务器端生成JSON数据
- Android学习笔记45-JSON数据解析(GSON方式)