首页 > 系统 > Android > 正文

Android 解析Json的方式:底层做法、Gson、FastJson

2019-11-08 02:46:32
字体:
来源:转载
供稿:网友

上一篇博客写了Android如何解析xml,现在我就写写Android是怎么解析Json的。 同样,解析必定是要拿取传过来的数据的,那么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=" + pid + ", 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>*
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表