今天给大家讲的是解析Json 其中有三种可以解析的方式1.JsonArray JsonObject 2.Gson 3.Fast-json
直接上代码,这里也要重写AsyncTask的两个方法
1.0:使用原生态
class MyTask extends AsyncTask{
@Override
protected Object doInBackground(Object[] objects) {
try {
URL url=new URL(getString(R.string.server_name)+"persons.json");
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
//设置请求方式‘
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
//获取结果码
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);
}
Log.i("test",stringBuffer.toString());
//02.开始解析Json
//01.使用原生态
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+" "+page);
}
onPostExecute
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
}
server_name
<string name="server_name">http://193.168.2.210/</string>
2.0:Gson解析json 02.使用Gson解析json
Gson gson=new Gson();
BigPerson bigPerson=gson.fromJson(stringBuffer.toString(),BigPerson.class);
Log.i("test",bigPerson.getList()+"");
List<SmallPerson> persons=bigPerson.getPersons();
for (SmallPerson person : persons) {
Log.i("test",person.toString());
}
这里需要联网下载Gson,同时也要写两个Person类
BigPerson
public class BigPerson {
private int list;
private List<SmallPerson> persons;
public BigPerson() {
}
public BigPerson(int list, List<SmallPerson> persons) {
this.list = list;
this.persons = persons;
}
public int getList() {
return list;
}
public void setList(int list) {
this.list = list;
}
public List<SmallPerson> getPersons() {
return persons;
}
public void setPersons(List<SmallPerson> persons) {
this.persons = persons;
}
}
SmallPerson
public class SmallPerson implements Parcelable{
private int pid;
private String pname;
private int page;
public SmallPerson() {
}
public SmallPerson(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 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<SmallPerson> CREATOR=new Parcelable.Creator<SmallPerson>(){
@Override
public SmallPerson createFromParcel(Parcel parcel) {
SmallPerson smallPerson=new SmallPerson();
smallPerson.setPid(parcel.readInt());
smallPerson.setPname(parcel.readString());
smallPerson.setPage(parcel.readInt());
return smallPerson;
}
@Override
public SmallPerson[] newArray(int i) {
return new SmallPerson[i];
}
};
@Override
public String toString() {
return "SmallPerson{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", page=" + page +
'}';
}
}
3.0:FastJson(需要导入fastjson-1.2.3.jar)
BigPerson bigPerson=JSON.parseObject(stringBuffer.toString(),BigPerson.class);
Log.i("test",bigPerson.getList()+"");
List<SmallPerson> persons=bigPerson.getPersons();
for (SmallPerson person : persons) {
Log.i("test",person.toString());
}
然后记得配置权限 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
PS:就是可以增加用户体验,减少用户的流量,同时也增加了系统的API的解析速度最快