一、Json簡介
JSON官網(wǎng)(中文版):http://www.json.org/json-zh.html
JSON(JavaScript Object Notation)是一種輕量級(輕量級?簡單、易操作、快捷)的數(shù)據(jù)交換格式。主要目的就是給出一套通用的數(shù)據(jù)格式,大家按照這種格式定義自己的數(shù)據(jù),方便數(shù)據(jù)的交換。特點是(相對來說)易于人閱讀和編寫,易于機(jī)器解析和生成。
Rules:
1.“名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀(jì)錄(record),結(jié)構(gòu)(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關(guān)聯(lián)數(shù)組 (associative array)。
2.值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數(shù)組(array)。
JSON可以有以下格式:
1.對象是一個無序的“ ‘名稱/值’ 對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結(jié)束。每個“名稱”后跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。

2.數(shù)組是值(value)的有序集合。一個數(shù)組以“[”(左中括號)開始,“]”(右中括號)結(jié)束。值之間使用“,”(逗號)分隔。

以上是最基本的json知識,想深入了解的,請移步官網(wǎng)。
下面舉個栗子給大家嘗嘗:
{
"type":"forecast1d",
"weatherinfo": [
{
"city": "北京",
"cityid": "1",
"temp1": "22℃",
"temp2": "10℃",
"weather": "晴",
"ptime": "11:00"
},
{
"city": "上海",
"cityid": "2",
"temp1": "24℃",
"temp2": "12℃",
"weather": "晴",
"ptime": "11:00"
}
]
}
栗子好難看,上截圖(截圖太小看不清...戳這里看大圖<-- !):

NOTE:左側(cè)為JSON字符串,右側(cè)為解析結(jié)構(gòu),方便查看。
福利:截圖是我在一個在線JSON Editor上截的,體驗一下-->JSON Editor,很好用推薦給大家。
二、使用Gson在Android中解析Json
認(rèn)清了JSON,就要解析它。
你可以使用的JSON庫:
JSONObject(源自Android官方)、
GSon(源自Google)、
Jackson(第三方開源庫)、
FastJSON(第三方開源庫)、
等。。。
本篇文章使用Gson解析JSON,Gson地址:http://code.google.com/p/google-gson/

無法下載?百度云分享一下http://pan.baidu.com/s/1kTur5xd,提取密碼:5oae
根據(jù)JSON串的結(jié)構(gòu)定義一個類(這里我們把這個類叫Result),我們直接把得到的JSON串解析成這個類。class Result定義如下:
import java.util.List;
public class Result {
public String type;
public List
weatherinfo;
public static class Info {
public String city;
public String cityid;
public String temp1;
public String temp2;
public String weather;
public String ptime;
}
}

定義好了待解析成的class之后,接下來使用Gson解析JSON串就可以了:
Gson gson = new Gson();
Result r = gson.fromJson(jsonData, Result.class);
So easy!
難點:1.如何定義這個待解析成的類?其實很簡單,看到JSON結(jié)構(gòu)里面有{ }你就定義一個類,看到[ ]你就定義一個List即可,最后只剩下最簡單的如String、int等基本類型直接定義就好。2.內(nèi)部嵌套的類,請使用public static class className { }。3.類內(nèi)部的屬性名,必須與JSON串里面的Key名稱保持一致。這三點請自行對照我們上面舉的Result的栗子,都有對應(yīng)。