深入浅析Android JSON解析

 更新时间:2015年12月23日 09:32:23   作者:小破孩123  
android中网络数据传输是经常被用到的,通常我们使用xml或者json,而json更加轻量,便捷,我们使用的更多。我自己在项目中使用很多,今天就说说android中怎么去解析JSON,帮助自己总结内容,同时帮助别人少走弯路

JSON语法

首先看JSON的语法和结构,这样我们才知道怎么去解析它。JSON语法时JavaScript对象表示语法的子集。

JSON的值可以是:

数字(整数或者浮点数)

字符串(在双引号内)

逻辑值(true 或 false)

数组(使用方括号[]包围)

对象( 使用花括号{}包围)

null

JSON中有且只有两种结构:对象和数组。

1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 [“java”,“javascript”,“vb”,…],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

做个Android网络编程的同学一定对于JSON解析一点都不陌生,因为现在我们通过手机向服务器请求资源,服务器给我们返回的数据资源一般都是以JSON格式返回,当然还有一些通过XML格式返回,相对JSON格式,XML格式的数据在处理时相对比较繁琐,并且Android为我们提供了两个解析JSON对象的类:JSONObject与JSONArray这两个对象可以很好的满足我们的需求,JSONArray对象可以以数组的形式将数据返回到手机,JSONObject对象则可以以对象的形式将数据为我们封装好返回,手机接收都这两种数据后,通过解析,可以很方便的使用,大大的方便了我们的开发学习。

  当然在使用JSONObject进行数据解析时,有两种方式,一种通过键值对的形式一个一个的取数据;另一种就是将JSONObject解析为具体的对象,然后通过对象的get、set方法进行数据的读取与操作,对于第一种方式,相信刚接触JSON解析的小童鞋都是这样干的,相对第一种方式,第二种方式更加的简单方便,下面我们就一起学习一下如何实现将JSONObject对象转化为具体的对象吧。

  因为今天我们要探讨的是关于JSONObject的解析,所以我就通过一个简单的对象创建--对象封装--对象解析--对象操作,为大家介绍一下如何进行JSONObject向具体对象的转化。

  首先我们的对象类(user):

public class User {
  private String id;
  private String name;
  private String from;
  public String getId() {
    return id;
  }
  public void setId(String id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getFrom() {
    return from;
  }
  public void setFrom(String from) {
    this.from = from;
  }
  @Override
  public String toString() {
    return "User [id=" + id + ",name=" + name + ",from=" + from +"]";
  }
}

  这里我重写了对象的toString方法,这里一定要注意返回参数的格式:类名+'['+参数名+'='+参数+.....+']'

  下面就是我们的对象创建与解析了:

  1、JSONObject对象解析类:

//JSONObject解析类
public class JsonParseToObject {
  public Object AllJsonParseToObject(String json, String packageAddress) {
    Object parseObject = null;
    try {
      parseObject = JSON.parseObject(json, Class.forName(packageAddress));
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
    return parseObject;
  }  
} 

  2、JSON对象的创建与解析:

public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView text = (TextView) findViewById(R.id.hw);
    //将我们的对象属性封装都JSONObject中
    JSONObject jo = new JSONObject();
    jo.put("id", "16");
    jo.put("name", "小了");
    jo.put("from", "河南");
    String str = jo.toString();
    Toast.makeText(this, str, Toast.LENGTH_LONG).show();
    //对JSONObject对象进行解析
    User u = (User) new JsonParseToObject().AllJsonParseToObject(jo.toString(), "com.example.jsontoobject.User");
    //判断JSONObject对象解析是否正确
    if(u != null){
      text.setText(jo.toString()+"\nid:"+u.getId()+";name:"+u.getName()+";from:"+u.getFrom());//进行对象操作
    }else{
      text.setText("User == null");
    }
  }
}

  布局文件很简单就是一个文本框,用来显示解析后的数据。

  好了到这里我们关于JSONObject解析的知识就为大家介绍完毕,没用过这种方式的小伙伴可以尝试一下,还是挺方便的,如果你有更好的方式,还望交流学习。

以上内容是小编给大家分享的Android JSON解析的全部叙述,希望可以帮助大家。

相关文章

  • Android 日历控件库,可左右滑动,显示公历,农历,节假日等功能

    Android 日历控件库,可左右滑动,显示公历,农历,节假日等功能

    这篇文章主要介绍了Android 日历控件库,可左右滑动,显示公历,农历,节假日等功能的相关资料,需要的朋友可以参考下
    2016-09-09
  • Android开发之关于项目

    Android开发之关于项目

    本文是此系列文章的第二篇,给大家介绍的是项目相关的内容,非常的细致全面,有需要的小伙伴可以参考下
    2016-02-02
  • Android VideoCache视频缓存的方法详解

    Android VideoCache视频缓存的方法详解

    这篇文章主要介绍了Android VideoCache视频缓存的方法详解的相关资料,AndroidVideoCache是一个视频/音频缓存库,利用本地代理实现了边下边播,需要的朋友可以参考下
    2017-07-07
  • 快速解决Android适配底部返回键等虚拟键盘的问题

    快速解决Android适配底部返回键等虚拟键盘的问题

    今天小编就为大家分享一篇快速解决Android适配底部返回键等虚拟键盘的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Flutter学习之构建、布局及绘制三部曲

    Flutter学习之构建、布局及绘制三部曲

    这篇文章主要给大家介绍了关于Flutter学习之构建、布局及绘制三部曲的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Flutter具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • Android中activity跳转按钮事件的四种写法

    Android中activity跳转按钮事件的四种写法

    这篇文章主要介绍了Android中activity跳转按钮事件的四种写法,下文中包括四个activity的内容详解,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • Android引用arr包的两种方法

    Android引用arr包的两种方法

    这篇文章介绍了android中引用arr包的两种方法,jar包和arr包,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-11-11
  • Android ApiDemo示例工程的创建

    Android ApiDemo示例工程的创建

    本文主要介绍Android ApiDemo示例工程的创建,这里SDK中的示例工程做了大致介绍,并说明如何创建ApiDemo 示例工程,有需要看自带代码的朋友可以参考下
    2016-09-09
  • Android Flutter表格组件Table的使用详解

    Android Flutter表格组件Table的使用详解

    Table组件不同于其它Flex布局,它是直接继承的RenderObjectWidget的。本篇文章主要介绍如何在页面中使用表格做一个记录,感兴趣的可以尝试一下
    2022-06-06
  • android LabelView实现标签云效果

    android LabelView实现标签云效果

    这篇文章主要为大家详细介绍了android LabelView实现标签云效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05

最新评论