zoukankan      html  css  js  c++  java
  • 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("======姓名========
    " + x);
                    x = obj.getString("性别");
                    sb.append("
    ======性别========
    " + x);
                    x = obj.getString("年龄");
                    sb.append("
    ======年龄========
    " + x);
    
                    JSONObject obj1 = obj.getJSONObject("学习成绩");
                    x = obj1.getString("数学");
                    sb.append("
    ======数学========
    " + x);
                    x = obj1.getString("语文");
                    sb.append("
    ======语文========
    " + x);
                    x = obj1.getString("英语");
                    sb.append("
    ======英语========
    " + x);
    
                    JSONArray array = obj1.getJSONArray("综合");
                    obj = array.getJSONObject(0);
                    x = obj.getString("文科综合");
                    sb.append("
    ======文科综合========
    " + x);
                    obj = array.getJSONObject(1);
                    x = obj.getString("理科综合");
                    sb.append("
    ======理科综合========
    " + x);
    
                    JSONStringer s = new JSONStringer();
                    sb.append("
    ======================
    "
                            + 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;
        }
    }
  • 相关阅读:
    一些业内有名的网站收集
    WCF重载
    FCKEditor fckconfig.js配置,添加字体和大小 附:中文字体乱码问题解决
    查询第几条到第几条的数据的SQL语句
    SPOJ 9939 Eliminate the Conflict
    UVA 10534 Wavio Sequence
    HDU 3474 Necklace
    POJ 2823 Sliding Window
    UVA 437 The Tower of Babylon
    UVA 825 Walking on the Safe Side
  • 原文地址:https://www.cnblogs.com/AndyGe/p/3437603.html
Copyright © 2011-2022 走看看