Android 中解析 JSON
什么是JSON?
1.JSON:Javascript Object Nation
2.JSON是一系列鍵值對的集合
3.JSON以經被大多數開發人員接受,在網絡數據傳輸中應用相當廣泛
4.JSON相對XML來說解析相對方便一些
JSON vs XML
1.JSON 和 XML 可讀性基本相同
2.JSON 和 XML 同樣有豐富的解析手段
3.JSON相對XML來說體積數據小
4.JSON和Javascript的交互更加方便
5.JSON對數據的描述性相對較差
有什么不懂的可以去官網去看看:www.json.org
在google android中也有關于解析JSON的類庫:JsonReader,但是只能在3.0以后的版本中才可以用,在這里我們用google提供的類庫google-gson,可以從code.google.com/p/google-gson/下載jar包。
下面通過一個小例子來學習一下:
例子:
[{"name":"zhangsan","age":22},{"name":"lisi","age":23}]
分析:
1.開始解析數組
2.開始解析對象
3.解析鍵值對
4.解析鍵值對
5.解析對象結束
6.開始解析對象
7.解析鍵值對
8.解析鍵值對
9.解析對象結束
10.解析數組結束
下面的是一個Activity,很簡單只有一個button,并為button添加單擊事件,
package com.tony.json;import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button;
public class JsonActivity extends Activity { /* Called when the activity is first created. /
private String jsonData = "[{\"name\":\"zhangsan\",\"age\":22},{\"name\":\"lisi\",\"age\":23}]"; private Button jsonButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); jsonButton = (Button) findViewById(R.id.json_button); jsonButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { JsonUtils jsonUtils = new JsonUtils(); jsonUtils.parseJson(jsonData); } }); }
}</pre>
這個類中主要是解析json數組:
package com.tony.json;import java.io.IOException; import java.io.StringReader;
import android.util.Log;
import com.google.gson.stream.JsonReader;
public class JsonUtils { private static final String TAG = "JsonUtils";
public void parseJson(String jsonData){ JsonReader reader = new JsonReader(new StringReader(jsonData)); try { reader.beginArray(); // 開始解析數組 while (reader.hasNext()) { reader.beginObject(); // 開始解析對象 while (reader.hasNext()) { String tagName = reader.nextName(); // 得到鍵值對中的key if (tagName.equals("name")) { // key為name時 Log.i(TAG, "name--------->" + reader.nextString()); // 得到key中的內容 }else if (tagName.equals("age")) { // key為age時 Log.i(TAG, "age--------->" + reader.nextInt()); // 得到key中的內容 } } reader.endObject(); } reader.endArray(); } catch (IOException e) { e.printStackTrace(); } }
}</pre>
下面是運行后在logcat中打印出的結果:
轉自: http://tonysun3544.iteye.com/blog/1330027