您的位置:首页 > 移动开发 > Android开发

Android开发之解析JSon数据

2013-09-27 18:46 393 查看
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式, 是一系列键值对的集合。

技术有优点肯定也会有缺点下面看下JSON与XML的比较

1.JSON和XML的数据可读性基本相同

2.JSON和XML同样拥有丰富的解析手段

3.JSON相对于XML来讲,数据的体积小

4.JSON与JavaScript的交互更加方便

5.JSON对数据的描述性比XML较差

6.JSON的速度要远远快于XML

JSon数据表示方式

{

“name”:"DMT",

"detail-info":

{

"birthday":"2013.09.27"

"job":"programmer"

}

}

想更多地了解什么是JSon,可以到它的官网去看下,有中文的网址:http://www.json.org/json-zh.html

下面就用JsonReader来解析Json数据

在Android3.0之前需要添加google-gson的lib才能使用JsonReader,这是一个自包含的类库,不依赖其它的库。如有需要可以到点击打开链接下载。

如果是在Android3.0之后的版本就不需要手动添加.lib,安装SDK时已经帮我们安装好了。

不管是google-gson还是SDK的JsonReader,使用方法都是一样的;

要使用google-gson就要先添加lib到我们的工程,如下



在lib上右键出现下图,选择“configure buidl path”构建路径,这样我们就能使用google-gson了



定义一串简单的Json数据

private String JsonData = "[{\"name\":\"deng\",\"age\":30}, {\"name\":\"li\",\"age\":20}]";


定义一个工具类来解析Json数据

package com.example.utils;

import java.io.IOException;
import java.io.StringReader;

import android.annotation.SuppressLint;
import android.content.Context;
import android.widget.Toast;

import com.google.gson.stream.JsonReader;

public class JsonUtils {
	private Context context;
	public void SetContext(Context context){
		this.context = context;
	}
	@SuppressLint("NewApi")
	public void parseJson(String jsonData) {
		//首先生成JsonReader对象
		JsonReader reader = new JsonReader(new StringReader(jsonData));
		String na = null;
		int age = 0;
		try {
			reader.beginArray(); // 开始解析数组
			while (reader.hasNext()) {  //是否有下个Json对象
				reader.beginObject();  //开始解析Json对象
				while (reader.hasNext()) {  //是否有下个键值对
					String name = reader.nextName();  //读取键值对
					if (name.equals("name")) {
						na = reader.nextString();  //获取字符串类型的值
						Toast.makeText(context, "name = " + na, Toast.LENGTH_SHORT).show();
					} else if (name.equals("age")) {
						age = reader.nextInt();   //获取整型值
						Toast.makeText(context, "age = " + age, Toast.LENGTH_SHORT).show();
					}
				}
				reader.endObject();  //解析对象结束
			}
			reader.endArray(); //解析数组结束
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


是Activity中定义一个按钮,点击按钮就开始解析Json数据

package com.example.jsondemo;

import com.example.utils.JsonUtils;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private String JsonData = "[{\"name\":\"deng\",\"age\":30}, {\"name\":\"li\",\"age\":20}]";
	private Button btn = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		btn = (Button)findViewById(R.id.btn);
		btn.setOnClickListener(new btnListener());
	}

	private class btnListener implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			JsonUtils jsonUtils = new JsonUtils();
			jsonUtils.SetContext(MainActivity.this);
			jsonUtils.parseJson(JsonData);   //解析传入的json数据
		}
		
	}
}
得到的结果



示例Demo

点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: