今天是1024了,祝大家程序猿节快乐(ps:工作三年多了)

 

Android JSON原生解析(JSONObject)解析教程_第1张图片

 

早些时候 移动互联网刚刚兴起的时候,传输数据是通过XML,然后判断XML的Nood节点,易出错,

解析XML有三种:

SAX

SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备。SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。

Pull解析器:

  Pull解析是一个while循环,随时可以跳出。Pull解析器的工作方式为允许你的应用程序代码主动从解析器中获取事件,因此可以在满足了需要的条件后不再获取事件,结束解析工作。

 

DOM解析:

  DOM解析XML文件时,会将XML的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。因为DOM需要将所有内容读取到内存中,所以内存的消耗比较大,不建议使用DOM解析XML文件,若文件较小可行。

 

XML和JSON对比,XML体积更庞大,会有一些无用的Nood点<...> 传输和发送数据很占用带宽和内存

 

而JSON应运而生:

{"state":false,"message":"no","data":"0"} 体积小 效率高 易读等

解析JSON的框架有

GSON //Google的

FastJson //阿里巴巴

其他的不常用

原生解析是通过JSONObject

 

jsonObject = new JSONObject(data);

获取数据首先建立bean类

然后通过getString()/getInt/getDouble或者optString / optDouble等

 

opt和get的区别是:

opt:如果结果字段不存在会抛出一个异常 可能导致程序carsh

/** * Returns the value mapped by {@code name} if it exists, coercing it if * necessary, or throws if no such mapping exists. * * @throws JSONException if no such mapping exists. */public String getString(String name) throws JSONException {    Object object = get(name);    String result = JSON.toString(object);    if (result == null) {        throw JSON.typeMismatch(name, object, "String");    }    return result;}

 

get:如果字段不存在会有个default值

/** * Returns the value mapped by {@code name} if it exists, coercing it if * necessary, or the empty string if no such mapping exists. */public String optString(String name) {    return optString(name, "");}

调用

/** * Returns the value mapped by {@code name} if it exists, coercing it if * necessary, or {@code fallback} if no such mapping exists. */public String optString(String name, String fallback) {    Object object = opt(name);    String result = JSON.toString(object);    return result != null ? result : fallback;}

 

如果JSON里面有对象:

可以通过jsonObj.optJSONObject("name");返回一个JSONObject

如果有数组就是optJsonArray(name);

遍历

for (int i = 0; i < jsonArray.length(); i++) {    //每一条都是JSONObject对象     JSONObject tempJson = jsonArray.optJSONObject(i);  //把数据保存到Bean里添加到集合}

如果返回的JSON有转义字符如\ ,需要将该字段的数据通过String name = json.optString(name);然后JSONObject j1 = new JSONObject(name );

保存数据示例:

data.setTitle(jsonData.optString("Title"));data.setId(jsonData.optString("Id"));data.setUid(jsonData.optString("Uid"));

Android JSON原生解析(JSONObject)解析教程_第2张图片

更多相关文章

  1. 一点见解: Android事件分发机制(二)
  2. Android开发知识(八):Android事件处理机制:事件分发、传递、拦截、处
  3. Android中Activity之间的数据传递和Intent使用
  4. Android 匿名共享内存C++接口分析
  5. android 图片占用进程的内存算法
  6. Android 针对ListActivity中ListView 点击事件和长按事件
  7. Android 如何自定义一个简单的组件和自定义的点击事件(中级)
  8. 【移动开发】Android中图片过大造成内存溢出,OOM(OutOfMemory)异常
  9. Android的内存泄漏怎么治-----------MAT使用教程

随机推荐

  1. Android(安卓)TabLayout+ViewPager+Fragm
  2. Android Media (Audio) Framework 多媒体
  3. android 之手机客户端登陆
  4. Android — Android Studio 中常用的快捷
  5. Android指纹校验与生物识别的使用
  6. Android 之退出应用
  7. Android Activity切换动画效果的修改
  8. Dialog中弹出PopupWindow
  9. Android Application标签属性
  10. 【Android】(转)android模拟器命令详解