JSON

Android框架之路Json解析一篇就够(原生技术+Gson+FastJson)

字号+ 作者:H5之家 来源:H5之家 2017-05-04 09:05 我要评论( )

一、简介: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式

一、简介:

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

基本写一个涉及网络请求数据的App都要去解析Json数据。xml方式效率不如Json来的高,所以首选还是Json。本文将分别进行原生技术手动解析、使用Gson和FastJson三种方法来解析Json数据。

Gson是Google提供的一种解析json数据的框架,编码简洁,官方推荐。Fastjson是一个Java语言编写的高性能功能完善的JSON库,它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。

二、Json数组与对象区分:

很简单,遇到{…}就是Json对象,遇到[…]就是Json数组。

三、Demo效果: 原生技术手动解析

Android框架之路Json解析一篇就够(原生技术+Gson+FastJson)

Gson框架解析

Android框架之路Json解析一篇就够(原生技术+Gson+FastJson)

FastJson框架解析

Android框架之路Json解析一篇就够(原生技术+Gson+FastJson)

四、解锁所有姿势:

无论是Json数组还是Json对象,都是字符串,均可以转成JavaBean或者JavaBean的List集合。

原生技术手动解析

将json对象转换成JavaBean

Api介绍(org.json包下)

JSONObject(String string) : 构造函数,将json字符串解析为json对象. int length() : 得到json对象的长度. Xxx getXxx(String name) : 根据name获取json对象中对应的value,不存在时造成空指针异常. Xxx optXxx(String name) : 根据name获取json对象中对应的value,不存在时返回""或默认值.

测试json数据

{ "status": "0", "msg": "ok", "result": "哈哈啊哈哈哈哈" }

实现解析

private void jsonToJavaBeanByNative() { String json = "{\n" + " \"status\": \"0\",\n" + " \"msg\": \"ok\",\n" + " \"result\": \"哈哈啊哈哈哈哈\"\n" + "}"; //解析 try { JSONObject jsonObject = new JSONObject(json); String status = jsonObject.getString("status"); String result = jsonObject.optString("result"); String msg = jsonObject.optString("msg"); tv1.setText(json); tv2.setText(new DemoBean(status, msg, result).toString()); } catch (JSONException e) { e.printStackTrace(); } }

将json数组转换成JavaBean的List集合

Api介绍(org.json包下)

JSONArray(String string) : 构造函数,将json字符串解析为json数组. int length() : 得到json数组的长度. Xxx getXxx(String name) : 根据name获取json数组中对应的value,不存在时造成空指针异常. Xxx optXxx(String name) : 根据name获取json数组中对应的value,不存在时返回""或默认值.

测试json数据

[ { "status": "0", "msg": "ok", "result": "哈哈啊哈哈哈哈" }, { "status": "1", "msg": "Error", "result": "空的" } ]

实现解析

private void jsonToJavaBeanListByNative() { String json = "[\n" + " {\n" + " \"status\": \"0\",\n" + " \"msg\": \"ok\",\n" + " \"result\": \"哈哈啊哈哈哈哈\"\n" + " },\n" + " {\n" + " \"status\": \"1\",\n" + " \"msg\": \"Error\",\n" + " \"result\": \"空的\"\n" + " }\n" + "]"; List<DemoBean> list = new ArrayList<>(); try { JSONArray jsonArray = new JSONArray(json); for (int i = 0; i < jsonArray.length(); i++){ JSONObject obj = jsonArray.getJSONObject(i); if(obj != null){ String status = obj.getString("status"); String result = obj.optString("result"); String msg = obj.optString("msg"); list.add(new DemoBean(status, msg, result)); } } } catch (JSONException e) { e.printStackTrace(); } tv1.setText(json); tv2.setText(list.toString()); }

复杂json数据解析

测试json数据

{ "status": "0", "msg": "ok", "result": { "total": "33731", "pagenum": "1", "pagesize": "1", "list": [ { "content": "文化交流请问如何气温哦日哦还欠我I偶然穷温家穷文件哦I你去我就饿哦老婆群文件欧赔", "addtime": "2014-10-14 15:48:18", "url": "http://m.kaixinhui.com/detail-26458.html" }, { "content": "可是到了好看你看我哪舍得回来可完全认可啊你说的卡就好了啊深刻的理解好看啦可能去问价钱", "addtime": "2014-10-14 15:48:18", "url": "http://m.kaixinhui.com/detail-26458.html" } ] } } 使用GsonFormat生成JavaBean
File—>Settings—>Plugins—>搜索GsonFormat插件—>安装

实现解析

private void parseComplexJson() { String json = "{\n" + " \"status\": \"0\",\n" + " \"msg\": \"ok\",\n" + " \"result\": {\n" + " \"total\": \"33731\",\n" + " \"pagenum\": \"1\",\n" + " \"pagesize\": \"1\",\n" + " \"list\": [\n" + " {\n" + " \"content\": \"文化交流请问如何气温哦日哦还欠我I偶然穷温家穷文件哦I你去我就饿哦老婆群文件欧赔\",\n" + " \"addtime\": \"2014-10-14 15:48:18\",\n" + " \"url\": \"http://m.kaixinhui.com/detail-26458.html\"\n" + " },\n" + " {\n" + " \"content\": \"可是到了好看你看我哪舍得回来可完全认可啊你说的卡就好了啊深刻的理解好看啦可能去问价钱\",\n" + " \"addtime\": \"2014-10-14 15:48:18\",\n" + " \"url\": \"http://m.kaixinhui.com/detail-26458.html\"\n" + " }\n" + " ]\n" + " }\n" + "}"; ComplexDemoBean complexDemoBean = new ComplexDemoBean(); try { JSONObject jsonObject = new JSONObject(json); complexDemoBean.setStatus(jsonObject.optString("status")); complexDemoBean.setMsg(jsonObject.optString("msg")); JSONObject object = jsonObject.optJSONObject("result"); ComplexDemoBean.ResultBean resultBean = new ComplexDemoBean.ResultBean(); resultBean.setTotal(object.optString("total")); resultBean.setPagenum(object.optString("pagenum")); resultBean.setPagesize(object.optString("pagesize")); JSONArray list = object.getJSONArray("list"); List<ComplexDemoBean.ResultBean.ListBean> beanList = new ArrayList<>(); for (int i = 0; i < list.length(); i++){ ComplexDemoBean.ResultBean.ListBean listBean = new ComplexDemoBean.ResultBean.ListBean(); JSONObject obj = list.getJSONObject(i); listBean.setContent(obj.optString("content")); listBean.setAddtime(obj.optString("addtime")); listBean.setUrl(obj.optString("url")); beanList.add(listBean); } resultBean.setList(beanList); complexDemoBean.setResult(resultBean); tv1.setText(json); tv2.setText(complexDemoBean.toString()); } catch (JSONException e) { e.printStackTrace(); } }

特殊json数据解析

有些数据他们的key为数字,使用GsonFormat插件生成JavaBean是有问题的,这时需要我们自己去手写Bean。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 其实算法面试就是技术界的应试考题

    其实算法面试就是技术界的应试考题

    2017-05-01 17:02

  • 浅谈 PHP 与手机 APP 开发(API 接口开发)

    浅谈 PHP 与手机 APP 开发(API 接口开发)

    2017-05-01 08:01

  • 学习ExtJS框架并完成ExtJS+SSH2+JSON实现树形结构(一)

    学习ExtJS框架并完成ExtJS+SSH2+JSON实现树形结构(一)

    2017-04-30 17:01

  • JSON技术在电力业务系统数据库监控工具中的应用

    JSON技术在电力业务系统数据库监控工具中的应用

    2017-04-28 11:00

网友点评