Android JSON,Gson,fastjson实现比较

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:orientation="vertical" >



    <TableLayout

        android:layout_width="wrap_content"

        android:layout_height="match_parent" >



        <TableRow>



            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:text="org.json" />



            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:text="fastjson" />



            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:text="gson" />

        </TableRow>



        <TableRow>



            <LinearLayout

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:orientation="vertical" >



                <Button

                    android:id="@+id/person"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="person" />



                <Button

                    android:id="@+id/persons"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="persons" />



                <Button

                    android:id="@+id/stringList"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="stringList" />



                <Button

                    android:id="@+id/listMap"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="listMap" />



                <Button

                    android:id="@+id/raw"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="Self" />

            </LinearLayout>



            <LinearLayout

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:orientation="vertical" >



                <Button

                    android:id="@+id/person2"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="person" />



                <Button

                    android:id="@+id/persons2"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="persons" />



                <Button

                    android:id="@+id/stringList2"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="stringList" />



                <Button

                    android:id="@+id/listMap2"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="listMap" />



                <Button

                    android:id="@+id/raw2"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="Self" />

            </LinearLayout>



            <LinearLayout

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:orientation="vertical" >



                <Button

                    android:id="@+id/person3"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="person" />



                <Button

                    android:id="@+id/persons3"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="persons" />



                <Button

                    android:id="@+id/stringList3"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="stringList" />



                <Button

                    android:id="@+id/listMap3"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="listMap" />



                <Button

                    android:id="@+id/raw3"

                    android:layout_width="wrap_content"

                    android:layout_height="wrap_content"

                    android:onClick="click"

                    android:text="Self" />

            </LinearLayout>

        </TableRow>

    </TableLayout>



    <Button

        android:id="@+id/rawString"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:onClick="click"

        android:text="RawString" />



    <TextView

        android:id="@+id/tvShow"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/hello_world" />



</LinearLayout>

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.netjson"

    android:versionCode="1"

    android:versionName="1.0" >



    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="17" />



    <uses-permission android:name="android.permission.INTERNET" />



    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.example.netjson.MainActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />



                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>



</manifest>
MainActivity.java

package com.example.netjson;



import java.io.InputStream;

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;



import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import org.json.JSONStringer;



import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.TypeReference;



import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.app.Activity;

import android.util.Log;

import android.view.Menu;

import android.view.View;

import android.widget.TextView;



import com.google.gson.Gson;

import com.google.gson.reflect.TypeToken;



public class MainActivity extends Activity {



    String PATH = "http://192.168.0.102:7020/JSON.aspx";

    String TAG = "JSON";

    TextView tvShow;

    Handler handler = new Handler() {

        @Override

        public void handleMessage(Message msg) {

            switch (msg.what) {

            case 0x123:

                tvShow.setText(msg.obj.toString());

                Log.i(TAG, msg.obj.toString());

                break;

            }

        }

    };



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        tvShow = (TextView) findViewById(R.id.tvShow);

    }



    public void click(final View v) {

        final int vId = v.getId();

        new Thread() {

            public void run() {

                asynCall(vId);

            }

        }.start();

    }



    private void asynCall(int viewId) {

        String jsonStr = "";

        switch (viewId) {

        case R.id.person:

            String path1 = PATH + "?action_flag=person";

            String jsonString1 = HTTPUtils.getJsonContent(path1);

            Person person = JSONTool.getPerson(jsonString1);

            jsonStr = person.toString();

            break;

        case R.id.persons:

            String path2 = PATH + "?action_flag=persons";

            String jsonString2 = HTTPUtils.getJsonContent(path2);

            List<Person> list2 = JSONTool.getPersons(jsonString2);

            jsonStr = list2.toString();

            break;

        case R.id.stringList:

            String path3 = PATH + "?action_flag=stringList";

            String jsonString3 = HTTPUtils.getJsonContent(path3);

            List<String> list3 = JSONTool.getList(jsonString3);

            jsonStr = list3.toString();

            break;

        case R.id.listMap:

            String path4 = PATH + "?action_flag=listMap";

            String jsonString4 = HTTPUtils.getJsonContent(path4);

            List<Map<String, Object>> list4 = JSONTool.getListMap(jsonString4);

            jsonStr = list4.toString();

            break;

        case R.id.raw:

            List<Map<String, Object>> list = getListMap();



            JSONObject jo = new JSONObject();

            try {

                jo.put("list", list);

            } catch (JSONException e1) {

                // TODO Auto-generated catch block

                e1.printStackTrace();

            }

            String jStr = jo.toString();

            list.clear();

            try {

                JSONObject jsonObject = new JSONObject(jStr);

                JSONArray jsonArray = jsonObject.getJSONArray("list");

                for (int i = 0; i < jsonArray.length(); i++) {

                    JSONObject jsonObject2 = jsonArray.getJSONObject(i);

                    Map<String, Object> map = new HashMap<String, Object>();

                    Iterator<String> iterator = jsonObject2.keys();

                    while (iterator.hasNext()) {

                        String json_key = iterator.next();

                        Object json_value = jsonObject2.get(json_key);

                        if (json_value == null) {

                            json_value = "";

                        }

                        map.put(json_key, json_value);

                    }

                    list.add(map);

                }

            } catch (JSONException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

            jsonStr = list.toString();

            break;

        case R.id.person2:

            String path21 = PATH + "?action_flag=person";

            String jsonString21 = HTTPUtils.getJsonContent(path21);

            Person person2 = FastJsonTools

                    .getPerson(jsonString21, Person.class);

            jsonStr = person2.toString();

            break;

        case R.id.persons2:

            String path22 = PATH + "?action_flag=persons";

            String jsonString22 = HTTPUtils.getJsonContent(path22);

            List<Person> list22 = FastJsonTools.getPersons(jsonString22,

                    Person.class);

            jsonStr = list22.toString();

            break;

        case R.id.stringList2:

            String path23 = PATH + "?action_flag=stringList";

            String jsonString23 = HTTPUtils.getJsonContent(path23);

            List<String> list23 = FastJsonTools.getPersons(jsonString23,

                    String.class);

            jsonStr = list23.toString();

            break;

        case R.id.listMap2:

            String path24 = PATH + "?action_flag=listMap";

            String jsonString24 = HTTPUtils.getJsonContent(path24);

            List<Map<String, Object>> list24 = FastJsonTools

                    .getListMap(jsonString24);

            jsonStr = list24.toString();

            break;

        case R.id.raw2:

            List<Map<String, Object>> listt = getListMap();



            String jStrt = JSON.toJSONString(listt);

            List<Map<String, Object>> l = JSON.parseObject(jStrt,

                    new TypeReference<List<Map<String, Object>>>() {

                    });

            jsonStr = l.toString();

            break;

        case R.id.person3:

            String path31 = PATH + "?action_flag=person";

            String jsonString31 = HTTPUtils.getJsonContent(path31);

            Person person3 = GsonTools.getPerson(jsonString31, Person.class);

            jsonStr = person3.toString();

            break;

        case R.id.persons3:

            String path32 = PATH + "?action_flag=persons";

            String jsonString32 = HTTPUtils.getJsonContent(path32);

            List<Person> list32 = GsonTools.getPersons(jsonString32,

                    Person.class);

            jsonStr = list32.toString();

            break;

        case R.id.stringList3:

            String path33 = PATH + "?action_flag=stringList";

            String jsonString33 = HTTPUtils.getJsonContent(path33);

            List<String> list33 = GsonTools.getList(jsonString33);

            jsonStr = list33.toString();

            break;

        case R.id.listMap3:

            String path34 = PATH + "?action_flag=listMap";

            String jsonString34 = HTTPUtils.getJsonContent(path34);

            List<Map<String, Object>> list34 = GsonTools

                    .listKeyMaps(jsonString34);

            jsonStr = list34.toString();

            break;

        case R.id.raw3:

            List<Map<String, Object>> listg = getListMap();



            Gson gson = new Gson();

            String jStrg = gson.toJson(listg);

            listg.clear();

            try {

                listg = gson.fromJson(jStrg,

                        new TypeToken<List<Map<String, Object>>>() {

                        }.getType());

            } catch (Exception e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

            jsonStr = listg.toString();

            break;

        case R.id.rawString:

            String x;

            JSONObject obj;

            try {

                InputStream is = this.getResources()

                        .openRawResource(R.raw.json);

                byte[] buffer = new byte[is.available()];

                is.read(buffer);

                String json = new String(buffer, "utf-8");

                obj = new JSONObject(json);

                StringBuilder sb = new StringBuilder();



                x = obj.getString("姓名");

                sb.append("======姓名========\n" + x);

                x = obj.getString("性别");

                sb.append("\n======性别========\n" + x);

                x = obj.getString("年龄");

                sb.append("\n======年龄========\n" + x);



                JSONObject obj1 = obj.getJSONObject("学习成绩");

                x = obj1.getString("数学");

                sb.append("\n======数学========\n" + x);

                x = obj1.getString("语文");

                sb.append("\n======语文========\n" + x);

                x = obj1.getString("英语");

                sb.append("\n======英语========\n" + x);



                JSONArray array = obj1.getJSONArray("综合");

                obj = array.getJSONObject(0);

                x = obj.getString("文科综合");

                sb.append("\n======文科综合========\n" + x);

                obj = array.getJSONObject(1);

                x = obj.getString("理科综合");

                sb.append("\n======理科综合========\n" + x);



                JSONStringer s = new JSONStringer();

                sb.append("\n======================\n"

                        + s.object().key("a").value("aaa").endObject()

                                .toString());

                jsonStr = sb.toString();

            } catch (Exception e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }



            break;

        }

        Message msg = new Message();

        msg.what = 0x123;

        msg.obj = jsonStr;

        handler.sendMessage(msg);

    }



    private List<Map<String, Object>> getListMap() {

        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        Map<String, Object> map1 = new HashMap<String, Object>();

        map1.put("Id", 1001);

        map1.put("name", "jack");

        map1.put("address", "beijing");

        Map<String, Object> map2 = new HashMap<String, Object>();

        map2.put("id", 1002);

        map2.put("name", "rose");

        map2.put("address", "shanghai");

//        map2.put("Married", false);

//        map2.put("Birthday", new Date());

        list.add(map1);

        list.add(map2);

        return list;

    }



    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.main, menu);

        return true;

    }



}

Person.java

package com.example.netjson;



public class Person {

    private int id;

    private String name;

    private String address;



    public Person() {

        super();

    }



    public Person(int id, String name, String addrss) {

        super();

        this.id = id;

        this.name = name;

        this.address = addrss;

    }



    public int getId() {

        return id;

    }



    public void setId(int id) {

        this.id = id;

    }



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }



    public String getAddress() {

        return address;

    }



    public void setAddress(String address) {

        this.address = address;

    }



    @Override

    public String toString() {

        return "Person [addrss=" + address + ", id=" + id + ", name=" + name

                + "]";

    }

}

HTTPUtils.java

package com.example.netjson;



import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;



public class HTTPUtils {



    public HTTPUtils() {

    }



    public static String getJsonContent(String path) {

        try {

            URL url = new URL(path);

            HttpURLConnection connection = (HttpURLConnection) url

                    .openConnection();

            connection.setConnectTimeout(30000);

            connection.setRequestMethod("GET");

            connection.setDoInput(true);

            int code = connection.getResponseCode();

            if (code == 200) {

                return changeInputStream(connection.getInputStream());

            }

        } catch (MalformedURLException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

        return null;

    }



    /**

     * 将一个输入流转换成指定编码的字符串

     * 

     * @param inputStream

     * @return

     */

    private static String changeInputStream(InputStream inputStream) {

        String jsonString = "";

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        int len = 0;

        byte[] data = new byte[1024];

        try {

            while ((len = inputStream.read(data)) != -1) {

                outputStream.write(data, 0, len);

            }

            jsonString = new String(outputStream.toByteArray());

        } catch (IOException e) {

            e.printStackTrace();

        } 

        return jsonString;

    }

}

JOSNTool.java

package com.example.netjson;



import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;



import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;



/**

 * 完成对JSON数据的解析

 * 

 * @author wulianghuan

 * 

 */

public class JSONTool {



    public JSONTool() {



    }



    public static String createjsonString(String key, Object value) {

        JSONObject jsonObject = new JSONObject();

        try {

            jsonObject.put(key, value);

        } catch (JSONException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return jsonObject.toString();

    }



    /**

     * 获取对象数据

     * 

     * @param key

     * @param jsonString

     * @return

     */

    public static Person getPerson(String jsonString) {

        Person person = new Person();

        try {

            JSONObject personObject = new JSONObject(jsonString);

            person.setId(personObject.getInt("id"));

            person.setName(personObject.getString("name"));

            person.setAddress(personObject.getString("address"));

        } catch (JSONException e) {

            e.printStackTrace();

        }

        return person;

    }



    /**

     * 获取对象数组数据

     * 

     * @param key

     * @param jsonString

     * @return

     */

    public static List<Person> getPersons(String jsonString) {

        List<Person> list = new ArrayList<Person>();

        try {

            JSONArray jsonArray = new JSONArray(jsonString);

            // 返回json的数组

            for (int i = 0; i < jsonArray.length(); i++) {

                JSONObject jsonObject2 = jsonArray.getJSONObject(i);

                Person person = new Person();

                person.setId(jsonObject2.getInt("id"));

                person.setName(jsonObject2.getString("name"));

                person.setAddress(jsonObject2.getString("address"));

                list.add(person);

            }

        } catch (JSONException e) {

            e.printStackTrace();

        }



        return list;

    }



    /**

     * 获取String数组数据

     * 

     * @param key

     * @param jsonString

     * @return

     */

    public static List<String> getList(String jsonString) {

        List<String> list = new ArrayList<String>();

        try {

            JSONArray jsonArray = new JSONArray(jsonString);

            for (int i = 0; i < jsonArray.length(); i++) {

                String msg = jsonArray.getString(i);

                list.add(msg);

            }

        } catch (JSONException e) {

            e.printStackTrace();

        }

        return list;

    }



    /**

     * 获取对象的Map集合数据

     * 

     * @param key

     * @param jsonString

     * @return

     */

    public static List<Map<String, Object>> getListMap(String jsonString) {

        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        try {

            JSONArray jsonArray = new JSONArray(jsonString);

            for (int i = 0; i < jsonArray.length(); i++) {

                JSONObject jsonObject2 = jsonArray.getJSONObject(i);

                Map<String, Object> map = new HashMap<String, Object>();

                Iterator<String> iterator = jsonObject2.keys();

                while (iterator.hasNext()) {

                    String json_key = iterator.next();

                    Object json_value = jsonObject2.get(json_key);

                    if (json_value == null) {

                        json_value = "";

                    }

                    map.put(json_key, json_value);

                }

                list.add(map);

            }

        } catch (JSONException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }



        return list;

    }

}

FastJsonTool.java

package com.example.netjson;



import java.util.ArrayList;

import java.util.List;

import java.util.Map;



import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.TypeReference;



public class FastJsonTools {



    public FastJsonTools() {

        // TODO Auto-generated constructor stub

    }



    /**

     * @param <T>

     * @param jsonString

     * @param cls

     * @return

     */

    public static <T> T getPerson(String jsonString, Class<T> cls) {

        T t = null;

        try {

            t = JSON.parseObject(jsonString, cls);

        } catch (Exception e) {

            e.printStackTrace();

            // TODO: handle exception

        }

        return t;

    }



    /**

     * 使用Gson进行解析 List<Person>

     * 

     * @param <T>

     * @param jsonString

     * @param cls

     * @return

     */

    public static <T> List<T> getPersons(String jsonString, Class<T> cls) {

        List<T> list = new ArrayList<T>();

        try {

            list = JSON.parseArray(jsonString, cls);

        } catch (Exception e) {

        }

        return list;

    }



    public static List<Map<String, Object>> getListMap(String jsonString) {

        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        try {

            list = JSON.parseObject(jsonString,

                    new TypeReference<List<Map<String, Object>>>() {

                    });

        } catch (Exception e) {

            e.printStackTrace();

        }

        return list;

    }

}

GsonTool.java

package com.example.netjson;



import java.util.ArrayList;

import java.util.List;

import java.util.Map;



import com.google.gson.Gson;

import com.google.gson.reflect.TypeToken;



;

public class GsonTools {



    public GsonTools() {

        // TODO Auto-generated constructor stub

    }



    /**

     * @param <T>

     * @param jsonString

     * @param cls

     * @return

     */

    public static <T> T getPerson(String jsonString, Class<T> cls) {

        T t = null;

        try {

            Gson gson = new Gson();

            t = gson.fromJson(jsonString, cls);

        } catch (Exception e) {

            // TODO: handle exception

        }

        return t;

    }



    /**

     * 使用Gson进行解析 List<Person>

     * 

     * @param <T>

     * @param jsonString

     * @param cls

     * @return

     */

    public static <T> List<T> getPersons(String jsonString, Class<T> cls) {

        List<T> list = new ArrayList<T>();

        try {

            Gson gson = new Gson();

            list = gson.fromJson(jsonString, new TypeToken<List<T>>() {

            }.getType());

        } catch (Exception e) {

        }

        return list;

    }



    /**

     * @param jsonString

     * @return

     */

    public static List<String> getList(String jsonString) {

        List<String> list = new ArrayList<String>();

        try {

            Gson gson = new Gson();

            list = gson.fromJson(jsonString, new TypeToken<List<String>>() {

            }.getType());

        } catch (Exception e) {

            // TODO: handle exception

        }

        return list;

    }



    public static List<Map<String, Object>> listKeyMaps(String jsonString) {

        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        try {

            Gson gson = new Gson();

            list = gson.fromJson(jsonString,

                    new TypeToken<List<Map<String, Object>>>() {

                    }.getType());

        } catch (Exception e) {

            // TODO: handle exception

        }

        return list;

    }

}

你可能感兴趣的:(fastjson)