JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。
在Android中被廣泛運用於客戶端和網絡(或者說服務器)通信。
JSON 表示名稱 / 值對的方式
按照最簡單的形式,可以用下面這樣的 JSON 表示"名稱 / 值對":
{ "name": "Brett", "lage":22,"sex": "女" } ,這表示了一個JsonObject。
[{name:"張三:",age:21,sex:"女"},{name:"李斯",age:21,sex:"女"},{name:"王五",age:21,sex:"女"}],使用中括弧表示JsonArray,是json對象數組。
一、解析第一種單個json對象的json數據。數據從網絡上獲取。演示實例為 查詢手機號碼歸屬地。
- URL url;
- StringBuffer sb = new StringBuffer();
- String line = null;
- try {
- url = new URL(
- "http://api.showji.com/Locating/default.aspx?m=13763089126&output=json&callback=querycallback");
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- InputStream is = conn.getInputStream();
- BufferedReader buffer = new BufferedReader(
- new InputStreamReader(is));
- while ((line = buffer.readLine()) != null) {
- sb.append(line);
- }
-
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
此處獲取的數據為:
querycallback({"Mobile":"13763******","QueryResult":"True","Province":"廣東","City":"湛江","AreaCode":"0759","PostCode":"524000","Corp":"中國移動","Card":"GSM"});
需要截取這個json對象出來。
String js = sb.substring(sb.indexOf("{"), sb.indexOf("}") + 1);
下面函數解析json對象,返回一個Callerloc對象
Callerloc是一個實體類
- private Callerloc parse(String json) {
- Callerloc my = null;
-
- if (json == null || json.length() < 1)
- return null;
- try {
- my = new Callerloc();
- JSONObject jsonobj = new JSONObject(json);
- my.setMobile(jsonobj.getString("Mobile"));
- my.setQueryResult(jsonobj.getString("QueryResult"));
- my.setProvince(jsonobj.getString("Province"));
- my.setCity(jsonobj.getString("City"));
- my.setAreaCode(jsonobj.getString("AreaCode"));
- my.setPostCode(jsonobj.getString("PostCode"));
- my.setCard(jsonobj.getString("Card"));
- my.setCorp(jsonobj.getString("Corp"));
- } catch (JSONException e) {
- e.printStackTrace();
- }
- return my;
- }