第一种是使用原生态解析json,第二种用的是Google的gson解析(要导入第三方jar包),第三种是阿里巴巴的fastjson。
下面是实现的具体代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void parseJson(View view){
new MyTast().execute();
}
class MyTast extends AsyncTask{
@Override
protected Object doInBackground(Object[] objects) {
try {
//这里的路径是<string name="server_name">http://192.168.43.129:8080/</string>
URL url=new URL(getString(R.string.server_name)+"persons.json");
HttpURLConnection httpURLConnection=(HttpURLConnection)url.openConnection();
//设置请求方式
httpURLConnection.setRequestMethod("GET");
//设置请求连接超时的时间(优化)
httpURLConnection.setConnectTimeout(5000);
//获取结果码
int code=httpURLConnection.getResponseCode();
if(code==200){
InputStream is=httpURLConnection.getInputStream();
//测试
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(is));
String str=null;
StringBuffer stringBuffer=new StringBuffer();
while((str=bufferedReader.readLine())!=null){
stringBuffer.append(str);
}
Log.i("test",stringBuffer.toString());
//1.开始解析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+" "+page);
//
// }
//2.使用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());
// }
//3.FastJson解析json
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());
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// catch (JSONException e) {
// e.printStackTrace();
// }
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
}
}
}
在使用gson和fastjson时用到了两个类,代码如下:
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;
}
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;
}
protected SmallPerson(Parcel in) {
pid = in.readInt();
pname = in.readString();
page = in.readInt();
}
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 Creator<SmallPerson> CREATOR = new 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 size) {
return new SmallPerson[size];
}
};
@Override
public String toString() {
return "SmallPerson{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", page=" + page +
'}';
}
}