1.通过主Activity的Button按钮实现数据的解析

public class MainActivity extends Activity {

 //定义一个包含Json格式的字符对象
private String Data="{\"name\":\"小张\",\"age\":25,\"sex\":\"男\"};{\"name\":\"小李子\",\"age\":41,\"sex\":\"女\"};" +
"{\"name\":\"倩倩\",\"age\":15,\"sex\":\"女\"}";
protected void onCreate(Bundle savedInstanceState ) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); Button button=(Button) super.findViewById(R.id.button);
button.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
new JsonUtils(Data);
}
});
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

2.解析json数据的业务类

public class JsonUtils {

    public JsonUtils(String jsonData)
{
    //创建一个google的Gson对象
Gson gson=new Gson();
    //根据主Activity传来的数据将数据拆分成Json格式的字符数组对象
    //没拆分之前是一个整体"{\"name\":\"小张\",\"age\":25,\"sex\":\"男\"};{\"name\":\"小李子\",\"age\":41,\"sex\":\"女\"};"
    //拆分之后是一个个单独的字符串对象格式正好符合JSON格式的标准"{\"name\":\"小张\",\"age\":25,\"sex\":\"男\"}" ; {\"name\":\"小李子\",\"age\":41,\"sex\":\"女\"}
 String[] users=jsonData.split(";"); for(int i=0;i<users.length;i++) {
       //创建一个User类对象,第一个参数是json格式的数据,第二个参数是实现数据解析的类对象
User user=gson.fromJson(users[i], User.class);
System.out.println(user.getName()+","+user.getAge()+","+user.getSex());
}     上面的方法还可以这样写:
       
2
但是强调一点是在主Activity的Data的数据是Json格式: "[{\"name\":\"小张\",\"age\":25,\"sex\":\"男\"},{\"name\":\"小李子\",\"age\":41,\"sex\":\"女\"},{\"name\":\"倩倩\",\"age\":15,\"sex\":\"女\"}]"
而不再是字符串格式
"{\"name\":\"小张\",\"age\":25,\"sex\":\"男\"};{\"name\":\"小李子\",\"age\":41,\"sex\":\"女\"};{\"name\":\"倩倩\",\"age\":15,\"sex\":\"女\"}
" 这样的,注意观察我用红色标注的地方,上面的是json格式的数据是以[(中括号)开始的,下面的字符串是以{(大括号)开始的,而且每一组
{\"name\":\"小张\",\"age\":25,\"sex\":\"男\"}这样的称为一组数据)的结尾是不同的一个是逗号,一个是分号注意这些细节

          Gson gson=new Gson();

          Type listpyte=new TypeToken< LinkedList<User> >(){}.getType();
         LinkedList<User> users=gson.fromJson(jsonData, listpyte);

         for(Iterator<User> iterator=users.iterator();iterator.hasNext();)
{
User user=(User) iterator.next();
System.out.println(user.getName()+","+user.getAge()+","+user.getSex());
}
    }

}

3.实现数据解析的类对象也就是这里的User类

 public class User
{
private String name;
private int age;
private String sex;
public String getName()
{
return name;
} public void setName(String name)
{
this.name = name;
} public int getAge()
{
return age;
} public void setAge(int age)
{
this.age = age;
} public String getSex()
{
return sex;
} public void setSex(String sex)
{
this.sex = sex;
}
}

4.运行之前要把Google的Gson-xxx.jar文件拷到项目中的libs文件夹下;这样之后才可以正常的运行

Android通过类对象的方式实现JSON数据的解析的更多相关文章

  1. javascript中 json数据的解析与序列化

    首先明确一下概念: json格式数据本质上就是字符串: js对象:JavaScript 中的几乎所有事务都是对象:字符串.数字.数组.日期.函数,等等. json数据的解析: 就是把后端传来的json ...

  2. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  3. Android 之 json数据的解析(jsonReader)

    json数据的解析相对而言,还是比较容易的,实现的代码也十分简单.这里用的是jsonReade方法来进行json数据解析. 1.在解析之前,大家需要知道什么是json数据. json数据存储的对象是无 ...

  4. Android中使用HttpURLConnection实现GET POST JSON数据与下载图片

    Android中使用HttpURLConnection实现GET POST JSON数据与下载图片 Android6.0中把Apache HTTP Client全部的包与类都标记为deprecated ...

  5. J2EE Web开发入门—通过action是以传统方式返回JSON数据

    关键字:maven.m2eclipse.JSON.Struts2.Log4j2.tomcat.jdk7.Config Browser Plugin Created by Bob 20131031 l ...

  6. 前端ajax用post方式提交json数据给后端时,网络报错 415

    项目框架:spring+springmvc+mybatis 问题描述:前端ajax用post方式提交json数据给后端时,网络报错 415 前端异常信息:Failed to load resource ...

  7. HttpURLConnection从网上获取Json数据并解析详解

    HttpURLConnection从网上获取Json数据并解析 1.HttpURLConnection请求数据的步骤 (1)构造一个URL接口地址: URL url = new URL("h ...

  8. iOS开发网络篇—JSON数据的解析

    iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...

  9. android客户端从服务器端获取json数据并解析的实现代码

    今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下   首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...

随机推荐

  1. RecyclerView实例-实现可下拉刷新上拉加载更多并可切换线性流和瀑布流模式(1)

    摘要 最近项目有个列表页需要实现线性列表和瀑布流展示的切换,首先我想到的就是上 [RecyclerView],他本身已经很好的提供了三种布局方式,只是简单做个切换应该是很简单的事情,如果要用Recyc ...

  2. C语言中,如何通过socket得到对端IP地址

    struct sockaddr_in clientaddr1; memset(&clientaddr1, 0x00, sizeof(clientaddr1)); socklen_t nl=si ...

  3. [转帖]MATLAB曲线绘制及颜色类型

    信号源产生的方法 来源:http://www.2cto.com/kf/201401/270494.html  matlab的checkerboard说明,GOOD! 来源:http://www.chi ...

  4. 设置tabbar的角标与第三方库Masonry的基本使用

    // 设置tabbar的角标 [[[[[self tabBarController] viewControllers] objectAtIndex: 0] tabBarItem] setBadgeVa ...

  5. PictureBox内的图片拖动功能

    当 PictureBox内的图片太大,超过PictureBox边框时可以用下面的方法来实现,   通过重绘来实现 :   Code bool wselected = false;  Point p = ...

  6. IE6解决固定定位代码

    有些朋友在进行网页布局时,会遇到IE6浏览器不支持固定定位的兼容性问题,本博将详细介绍此问题的解决方法,需要了解的朋友可以参考下. ie6 垂直居中固定定位,代码如下: #center {_posit ...

  7. X-Plane飞行模拟器购买安装

    要玩起X-Plane第一个步骤当然是购买了,要购买其实非常简单,只需要一张能够支持MasterCard或者其他外币结算的信用卡,在http://www.x-plane.com/官网上购买即可,比逛淘宝 ...

  8. poj 1273.PIG (最大流)

    网络流 关键是建图,思路在代码里 /* 最大流SAP 邻接表 思路:基本源于FF方法,给每个顶点设定层次标号,和允许弧. 优化: 1.当前弧优化(重要). 1.每找到以条增广路回退到断点(常数优化). ...

  9. Cocos2dx开发(2)——Win8.1下Cocod2dx 3.2环境搭建

    正式开始搭建cocos2dx环境,回到熟悉的VS 1.Python安装配置 这一步很简单,下载Python2.7.3,笔者直接用软件助手直接下载安装,最后配置环境变量 如下成功 2.cocos2dx ...

  10. OC文件操作(1)

    1.文件的浅度遍历与深度遍历: //NSFileManager * fm = [[NSFileManager alloc]init];//创建文件管理器 //第一步创建一个文件管理器 NSError ...