JSON简介

来源:互联网 发布:手机通话变声软件 编辑:程序博客网 时间:2024/05/18 09:16

(一)什么是JSON

JSON,Javascript Object Notation,JS对象标记,是一种取代XML的轻量级数据结构,一种具有特殊格式的字符串。
由于格式简单,因而占用流量小,常用于网络数据传输。
例如:

{    "name": "中国",    "province": [{        "name": "黑龙江",        "cities": {            "city": ["哈尔滨", "大庆"]        }    }, {        "name": "广东",        "cities": {            "city": ["广州", "深圳", "珠海"]        }    }, {        "name": "台湾",        "cities": {            "city": ["台北", "高雄"]        }    }, {        "name": "新疆",        "cities": {            "city": ["乌鲁木齐"]        }    }]}

(二)JSON的语法格式

JSON的语法格式很简单,只是用不同的分隔符将数据分割开来,且只有五个分隔符。

{} 双括号表示对象
[] 中括号表示数组
“” 双引号内是属性或值
: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
, 逗号表示对象分隔符

根据语法解析上一部分的例子。
JSON对象有两个属性:String类型的name和数组province.
province数组中有4个成员,每个成员又有两个属性:String类型的name,cities对象。
cities对象中存在唯一一个属性city,为String数组.

(三)JSON的格式转换

我们可以通过JSONObject和JSONArray完成数据的封装。

例如,向服务器发送数据时,需要将相关数据封装成JSON格式,之后将JSON转换成String,作为HTTP/SOAP/MQTT的BODY传送出去。以第一部分的实例为例。

    private String generateJSONStr(){        JSONObject china=new JSONObject();        JSONArray provinceList=new JSONArray();        JSONObject province;        JSONObject cities;        JSONArray city;        try {            province=new JSONObject();            cities=new JSONObject();            city=new JSONArray();            province.put("name","黑龙江");            city.put("哈尔滨");            city.put("大庆");            cities.put("city",city);            province.put("cities",cities);            provinceList.put(province);            province=new JSONObject();            cities=new JSONObject();            city=new JSONArray();            province.put("name","广东");            city.put("广州");            city.put("深圳");            city.put("珠海");            cities.put("city",city);            province.put("cities",cities);            provinceList.put(province);            province=new JSONObject();            cities=new JSONObject();            city=new JSONArray();            province.put("name","台湾");            city.put("台北");            city.put("高雄");            cities.put("city",city);            province.put("cities",cities);            provinceList.put(province);            province=new JSONObject();            cities=new JSONObject();            city=new JSONArray();            province.put("name","新疆");            city.put("乌鲁木齐");            cities.put("city",city);            province.put("cities",cities);            provinceList.put(province);            china.put("name","中国");            china.put("province",provinceList);            return china.toString();        } catch (JSONException e) {            e.printStackTrace();            return null;        }    }

相反,从服务器接收数据时,需要将JSON格式的String对象,转换成JSON对象。

    private JSONObject initJSON(String jsonStr){        try {            JSONObject country=new JSONObject(jsonStr);            String countryName=country.getString("name");            Log.i(TAG, "initJSON: country name is "+ countryName);            JSONArray provinceList=country.getJSONArray("province");            for (int indexProvince=0;indexProvince<provinceList.length();indexProvince++){                JSONObject province=provinceList.getJSONObject(indexProvince);                Log.i(TAG, "initJSON: province name is "+ province.getString("name"));                JSONObject cities=province.getJSONObject("cities");                JSONArray city=cities.getJSONArray("city");                for (int indexCity = 0; indexCity < city.length(); indexCity++) {                    Log.i(TAG, "initJSON: city name is "+ city.getString(indexCity));                }            }            return country;        } catch (JSONException e) {            e.printStackTrace();            return null;        }    }

当然,加解密,完整性校验以及数据类型转换在传输过程中,也是必不可少的。由于本文重点记录JSON,因此暂时忽略。之后有机会,再将安全的部分总结。

原创粉丝点击