android 使用三种方式解析网络JSON

第一种是使用原生态解析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 +
                '}';
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值