http://www.2cto.com/kf/201401/270452.html
一、什么是JSON?
JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。
JSON就是一串字符串 只不过元素会使用特定的符号标注。
{} 双括号表示对象
[] 中括号表示数组
"" 双引号内是属性或值
: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
所以 {"name": "Michael"} 可以理解为是一个包含name为Michael的对象
而[{"name": "Michael"},{"name": "Jerry"}]就表示包含两个对象的数组
当然了,你也可以使用{"name":["Michael","Jerry"]}来简化上面一部,这是一个拥有一个name数组的对象
二、JSON解析之传统的JSON解析
1、生成JSOn字符串
| 1 2 3 4 5 | publicstaticString createJsonString(String key, Object value) {        JSONObject jsonObject = newJSONObject();        jsonObject.put(key, value);        returnjsonObject.toString();    } | 
2、解析JSON字符串
分为以下三种情况,一个JavaBean,一个List数组,一个嵌套Map的List数组:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importorg.json.JSONArray;importorg.json.JSONObject;importcom.android.myjson.domain.Person;/** * 完成对json数据的解析 *  */publicclassJsonTools {    publicstaticPerson getPerson(String key, String jsonString) {        Person person = newPerson();        try{            JSONObject jsonObject = newJSONObject(jsonString);            JSONObject personObject = jsonObject.getJSONObject("person");            person.setId(personObject.getInt("id"));            person.setName(personObject.getString("name"));            person.setAddress(personObject.getString("address"));        } catch(Exception e) {            // TODO: handle exception        }        returnperson;    }    publicstaticList<person> getPersons(String key, String jsonString) {        List<person> list = newArrayList<person>();        try{            JSONObject jsonObject = newJSONObject(jsonString);            // 返回json的数组            JSONArray jsonArray = jsonObject.getJSONArray(key);            for(inti = 0; i < jsonArray.length(); i++) {                JSONObject jsonObject2 = jsonArray.getJSONObject(i);                Person person = newPerson();                person.setId(jsonObject2.getInt("id"));                person.setName(jsonObject2.getString("name"));                person.setAddress(jsonObject2.getString("address"));                list.add(person);            }        } catch(Exception e) {            // TODO: handle exception        }        returnlist;    }    publicstaticList<string> getList(String key, String jsonString) {        List<string> list = newArrayList<string>();        try{            JSONObject jsonObject = newJSONObject(jsonString);            JSONArray jsonArray = jsonObject.getJSONArray(key);            for(inti = 0; i < jsonArray.length(); i++) {                String msg = jsonArray.getString(i);                list.add(msg);            }        } catch(Exception e) {            // TODO: handle exception        }        returnlist;    }    publicstaticList<map<string, object="">> listKeyMaps(String key,            String jsonString) {        List<map<string, object="">> list = newArrayList<map<string, object="">>();        try{            JSONObject jsonObject = newJSONObject(jsonString);            JSONArray jsonArray = jsonObject.getJSONArray(key);            for(inti = 0; i < jsonArray.length(); i++) {                JSONObject jsonObject2 = jsonArray.getJSONObject(i);                Map<string, object=""> map = newHashMap<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(Exception e) {            // TODO: handle exception        }        returnlist;    }}</string></string,></string,></map<string,></map<string,></map<string,></string></string></string></person></person></person> | 
三、JSON解析之GSON
1、生成JSON字符串
| 1 2 3 4 5 6 7 8 9 10 11 | importcom.google.gson.Gson;publicclassJsonUtils {    publicstaticString createJsonObject(Object obj) {        Gson gson = newGson();        String str = gson.toJson(obj);        returnstr;    }} | 
二、解析JSON
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importcom.google.gson.Gson;importcom.google.gson.reflect.TypeToken;;publicclassGsonTools {    publicGsonTools() {        // TODO Auto-generated constructor stub    }    /**     * @param <t>     * @param jsonString     * @param cls     * @return     */    publicstatic<t> T getPerson(String jsonString, Class<t> cls) {        T t = null;        try{            Gson gson = newGson();            t = gson.fromJson(jsonString, cls);        } catch(Exception e) {            // TODO: handle exception        }        returnt;    }    /**     * 使用Gson进行解析 List<person>     *      * @param <t>     * @param jsonString     * @param cls     * @return     */    publicstatic<t> List<t> getPersons(String jsonString, Class<t> cls) {        List<t> list = newArrayList<t>();        try{            Gson gson = newGson();            list = gson.fromJson(jsonString, newTypeToken<list<t>>() {            }.getType());        } catch(Exception e) {        }        returnlist;    }    /**     * @param jsonString     * @return     */    publicstaticList<string> getList(String jsonString) {        List<string> list = newArrayList<string>();        try{            Gson gson = newGson();            list = gson.fromJson(jsonString, newTypeToken<list<string>>() {            }.getType());        } catch(Exception e) {            // TODO: handle exception        }        returnlist;    }    publicstaticList<map<string, object="">> listKeyMaps(String jsonString) {        List<map<string, object="">> list = newArrayList<map<string, object="">>();        try{            Gson gson = newGson();            list = gson.fromJson(jsonString,                    newTypeToken<list<map<string, object="">>>() {                    }.getType());        } catch(Exception e) {            // TODO: handle exception        }        returnlist;    }}</list<map<string,></map<string,></map<string,></map<string,></list<string></string></string></string></list<t></t></t></t></t></t></t></person></t></t></t> | 
三、JSON解析之FastJSON
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.TypeReference;publicclassJsonTool {    publicstatic<t> T getPerson(String jsonstring, Class<t> cls) {        T t = null;        try{            t = JSON.parseObject(jsonstring, cls);        } catch(Exception e) {            // TODO: handle exception        }        returnt;    }    publicstatic<t> List<t> getPersonList(String jsonstring, Class<t> cls) {        List<t> list = newArrayList<t>();        try{            list = JSON.parseArray(jsonstring, cls);        } catch(Exception e) {            // TODO: handle exception        }        returnlist;    }    publicstatic<t> List<map<string, object="">> getPersonListMap1(            String jsonstring) {        List<map<string, object="">> list = newArrayList<map<string, object="">>();        try{            list = JSON.parseObject(jsonstring,                    newTypeReference<list<map<string, object="">>>() {                    }.getType());        } catch(Exception e) {            // TODO: handle exception        }        returnlist;    }}</list<map<string,></map<string,></map<string,></map<string,></t></t></t></t></t></t></t></t> | 
总结:
JSON对于移动设备来说,尤其对于网络环境较差和流量限制的情况下,相对于XML格式的数据传输会更节省流量,传输效率更高。在这三种解析方式中FastJson是效率最高的,推荐使用。
 
                     
                    
                 
                    
                
 
         
 
                
            
        
 浙公网安备 33010602011771号
浙公网安备 33010602011771号