Android开发--Json数据的解析
2013-01-31 13:44
513 查看
在执行解析数据之前,需要将一个类库应用到你的程序中,下载的地址是:
http://code.google.com/p/google-gson/
下载解压之后你需要将蓝色标记的文件放入到你的程序之中应用
首先,我们需要知道什么是Json数据:
JSON的定义:
一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。
– Json.org
说到这里,可能会发现Json数据与XML文件很相似,下面,我们看下它们之间的对比:
1.JSON和XML的数据可读性基本相同
2.JSON和XML同样拥有丰富的解析手段
3.JSON相对于XML来讲,数据的体积小
4.JSON与JavaScript的交互更加方便
5.JSON对数据的描述性比XML较差
6.JSON的速度要远远快于XML
下面,我们看下Android官方文档给出的一个Json的例子:
这是一个Json数组,里面有两个对象,我们需要对其进行解析,下面的链接是官方文档对其解析的例子:
点击打开链接
下面,以一个具体的例子对其进行说明:
在这个例子中介绍三种解析Json的方法,其中第二和第三类是利用类对象和Json数据的互相转换完成的解析。
下面是实现的截图:
第一个按钮的作用是利用Google提供的Api解析Json数据,这里给出的是一个数组,具体的实现代码如下:
在主程序的调用如下:
第二个按钮是利用类对象向Json数据的转换进行的解析,下面是实现的代码:
在主程序的调用如下:
第三个按钮同第二个按钮的原理是一样的,不过这里解析的Json数组,代码如下:
在主程序的调用如下:
下面给出主程序的完整代码:
http://code.google.com/p/google-gson/
下载解压之后你需要将蓝色标记的文件放入到你的程序之中应用
首先,我们需要知道什么是Json数据:
JSON的定义:
一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。
– Json.org
说到这里,可能会发现Json数据与XML文件很相似,下面,我们看下它们之间的对比:
1.JSON和XML的数据可读性基本相同
2.JSON和XML同样拥有丰富的解析手段
3.JSON相对于XML来讲,数据的体积小
4.JSON与JavaScript的交互更加方便
5.JSON对数据的描述性比XML较差
6.JSON的速度要远远快于XML
下面,我们看下Android官方文档给出的一个Json的例子:
[ { "id": 912345678901, "text": "How do I read JSON on Android?", "geo": null, "user": { "name": "android_newb", "followers_count": 41 }, { "id": 912345678902, "text": "@android_newb just use android.util.JsonReader!", "geo": [50.454722, -104.606667], "user": { "name": "jesse", "followers_count": 2 } } ]}
这是一个Json数组,里面有两个对象,我们需要对其进行解析,下面的链接是官方文档对其解析的例子:
点击打开链接
下面,以一个具体的例子对其进行说明:
在这个例子中介绍三种解析Json的方法,其中第二和第三类是利用类对象和Json数据的互相转换完成的解析。
下面是实现的截图:
第一个按钮的作用是利用Google提供的Api解析Json数据,这里给出的是一个数组,具体的实现代码如下:
public class JsonUtils { public void parseJson(String jsonData) { try { //创建JsonReader 对象 JsonReader reader = new JsonReader(new StringReader(jsonData)); //开始解析数组 reader.beginArray(); //循环判断有没有下一个Json对象 while(reader.hasNext()){ //开始解析Json对象 reader.beginObject(); //循环判断Json对象里面有没有下一个键值对 while(reader.hasNext()){ String tagName = reader.nextName(); if(tagName.equals("name")){ //name键多对应的值 Log.d("BruceZhang", "name: "+reader.nextString()); }else if(tagName.equals("age")){ //age键多对应的值 Log.d("BruceZhang", "age: "+reader.nextString()); } } //Json对象的结尾 reader.endObject(); } //数组解析的结尾 reader.endArray(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
在主程序的调用如下:
private void jsonArray(String jsonData) { JsonUtils jsonUtils=new JsonUtils(); jsonUtils.parseJson(jsonData); }
第二个按钮是利用类对象向Json数据的转换进行的解析,下面是实现的代码:
public class JsonUtils2 { public void parseUserFromJson(String jsonData){ Gson gson=new Gson(); //把Json对象转换成User对象 User user=gson.fromJson(jsonData, User.class); Log.d("BruceZhang", "name:"+user.getName()); Log.d("BruceZhang", "name:"+user.getAge()); } }
在主程序的调用如下:
private void userJson(String jsonData){ JsonUtils2 jsonUtils=new JsonUtils2(); jsonUtils.parseUserFromJson(jsonData); }
第三个按钮同第二个按钮的原理是一样的,不过这里解析的Json数组,代码如下:
public class JsonUtils3 { public void parseUserFromJson(String jsonData){ // Type listType=(Type) new TypeToken<LinkedList<User>>(){}.getType(); // Gson gson=new Gson(); // LinkedList<User> users=gson.fromJson(jsonData, (java.lang.reflect.Type) listType); // for(Iterator<User> iterator=users.iterator();iterator.hasNext();){ // User user=(User)iterator.next(); // Log.d("BruceZhang", "name: "+user.getName()); // Log.d("BruceZhang", "name: "+user.getAge()); // } Type listType = new TypeToken<LinkedList<User>>(){}.getType(); Gson gson = new Gson(); //LinkList是双向链表 LinkedList<User> users = gson.fromJson(jsonData, listType); for (Iterator<User> iterator = users.iterator(); iterator.hasNext();) { User user = (User) iterator.next(); // System.out.println(user.getName()); // System.out.println(user.getAge()); Log.d("BruceZhang", "name: "+user.getName()); Log.d("BruceZhang", "name: "+user.getAge()); } } }
在主程序的调用如下:
private void userJsonArray(String jsonData){ JsonUtils3 jsonUtils=new JsonUtils3(); jsonUtils.parseUserFromJson(jsonData); }
下面给出主程序的完整代码:
public class MainActivity extends Activity {
/*
* 1.开始解析数组
* 2.开始解析对象
* 3.解析键值对(多个)
* 4.解析对象结束
* 5.开始解析对象
* 6.解析键值对
* 7.解析对象结束
* 8.解析数组结束
*/
private String jsonData="[{\"name\":\"BruceZhang\",\"age\":20},{\"name\":\"ZhangHu\",\"age\":23}]";
private String jsonData2="{\"name\":\"BruceZhang\",\"age\":20}";
private Button button;
private Button button2;
private Button button3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(new MyButton());
button2=(Button)findViewById(R.id.button2);
button2.setOnClickListener(new MyButton());
button3=(Button)findViewById(R.id.button3);
button3.setOnClickListener(new MyButton());
}
class MyButton implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button:
jsonArray(jsonData);
break;
case R.id.button2:
userJson(jsonData2);
break;
case R.id.button3:
userJsonArray(jsonData);
break;
default:
break;
}
}
}
private void jsonArray(String jsonData) { JsonUtils jsonUtils=new JsonUtils(); jsonUtils.parseJson(jsonData); }
private void userJson(String jsonData){ JsonUtils2 jsonUtils=new JsonUtils2(); jsonUtils.parseUserFromJson(jsonData); }
private void userJsonArray(String jsonData){ JsonUtils3 jsonUtils=new JsonUtils3(); jsonUtils.parseUserFromJson(jsonData); }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
相关文章推荐
- Android开发视频第二季之十二:JSON数据解析
- 【Android应用开发】-(17)获取Google天气预报通过Xml和JSON解析数据
- Android开发之JSON数据解析详解(二)
- Android开发之原生解析复杂的json数据
- Android开发案例:网络交互&XML与json数据解析&HttpUtil优化
- Android开发之解析JSon数据
- 【Android网络开发の4】解析和生成JSON数据
- Android网络开发中如何使用JSON进行网络通信---Android_JSON数据通讯方法解析
- Android开发之解析JSon数据(二)
- 【Android开发经验】Json数据格式介绍、使用Android自带类库完成Json生成与解析
- Android 开发之JSON数据解析
- Android开发: JSONObject的数据解析
- Android开发json数据解析之账单记录与查看详情(遍历到ListView中)
- Android开发中使用Gson解析OkHttp传回来的复杂json数据
- Android开发--Json数据的解析
- Android开发 解析JSON数据格式 如何去掉JSON数据文件的BOM头
- 【Android网络开发の4】解析和生成JSON数据
- 【Android开发经验】Json数据格式介绍、使用Android自带类库完成Json生成与解析
- Android商城开发系列(六)——使用 OkHttpUtils 请求网络 + 使用 fastjson解析数据
- Android初级开发(九)——网络交互—解析JSON格式数据