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