Android解析Json(Google Gson)

什么是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添加单击事件,

Java代码 复制代码 收藏代码
  1. package com.tony.json;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. public class JsonActivity extends Activity {
  7. /** Called when the activity is first created. */
  8. private String jsonData = "[{\"name\":\"zhangsan\",\"age\":22},{\"name\":\"lisi\",\"age\":23}]";
  9. private Button jsonButton;
  10. @Override
  11. public void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.main);
  14. jsonButton = (Button) findViewById(R.id.json_button);
  15. jsonButton.setOnClickListener(new View.OnClickListener() {
  16. @Override
  17. public void onClick(View v) {
  18. JsonUtils jsonUtils = new JsonUtils();
  19. jsonUtils.parseJson(jsonData);
  20. }
  21. });
  22. }
  23. }
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);
			}
		});
    }
}

这个类中主要是解析json数组:

Java代码 复制代码 收藏代码
  1. package com.tony.json;
  2. import java.io.IOException;
  3. import java.io.StringReader;
  4. import android.util.Log;
  5. import com.google.gson.stream.JsonReader;
  6. public class JsonUtils {
  7. private static final String TAG = "JsonUtils";
  8. public void parseJson(String jsonData){
  9. JsonReader reader = new JsonReader(new StringReader(jsonData));
  10. try {
  11. reader.beginArray(); // 开始解析数组
  12. while (reader.hasNext()) {
  13. reader.beginObject(); // 开始解析对象
  14. while (reader.hasNext()) {
  15. String tagName = reader.nextName(); // 得到键值对中的key
  16. if (tagName.equals("name")) { // key为name时
  17. Log.i(TAG, "name--------->" + reader.nextString()); // 得到key中的内容
  18. }else if (tagName.equals("age")) { // key为age时
  19. Log.i(TAG, "age--------->" + reader.nextInt()); // 得到key中的内容
  20. }
  21. }
  22. reader.endObject();
  23. }
  24. reader.endArray();
  25. } catch (IOException e) {
  26. e.printStackTrace();
  27. }
  28. }
  29. }
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();
		}
	}
}

下面是运行后在logcat中打印出的结果:

猜你喜欢

转载自erbo2008.iteye.com/blog/1682740