android JSON数据解析分析
来源:互联网 发布:南京大学软件学院硕士 编辑:程序博客网 时间:2024/05/16 17:29
android JSON数据解析分析
android开发中有大多数时间在和数据打交道,而JSON是目前移动端常用的数据类型,最近做了一个项目,要用到很多JSON数据,开始很是懵逼啊,看到JSON的数据后第一感觉是这特么是人写的JSON吗, 这特么的JSON结构,数组嵌套对象,对象在嵌套数组, 看了一会就有一个大大的懵逼,静下来认真的分析一下看看JSON的结构还是有迹可循的,下面分析一下我的思路
目录:
- android JSON数据解析分析
- 目录
- 用到的工具
- 解析思路
- JSON格式如下
- 格式化完后的格式
- PS这里使用的是我自己本地的服务器所以JSON数据可能结构不是很合理but原理都是一样的不多解释
- 分析步骤
- JSON格式转换成JavaBean实体类
- 装换成JavaBean实体类
- 总结 每个JSONObject中的元素分为三种分别为 普通的字段 JSONObject对象和JSONArray对象 而字段转换成实体类对应的就是该实体类的一个变量 其变量的类型就是字段对应的类型 JSONObject和JSONArray装换成实体类对应的就是该实体类的一个List T 集合 该泛型就是根据其对象来定义的一个内部类 该内部类所拥有的属性就是JSONObject或者JSONArray所拥有的字段转换成其属性
用到的工具
1.HiJson ,用来格式化JSON数据格式,以便分析JSON的结构,创建JSON的实体类
2.JSON数据源, 用来解析测试的JSON对象
3.EditPlus , 可能从网络上请求的JSON的数据是乱码的, 这时候就可以用EditPlus来把乱码的转换成正常的编码格式
解析思路
- 先拿到JSON的数据, 然后在数据的编码格式转换成正常的编码格式, 一般为UTF-8, 不会转换格式的点击这里查看如何转换文字格式
2.把拿到的JSON数据复制到HiJSON中, 点击标题栏里面的格式化便可把JSON数据格式化成目录格式的视图, 没有HiJSON的点击这里下载- 格式化完毕就该分析其数据结构和对应的JavaBean实体类了
JSON格式如下
这是JSON数据的原始数据,没有格式化之前
{"retcode":200,"data":[{"id":10000,"title":"新闻","type":1,"children":[{"id":10007,"title":"北京","type":1,"url":"/10007/list_1.json"},{"id":10006,"title":"中国","type":1,"url":"/10006/list_1.json"},{"id":10008,"title":"国际","type":1,"url":"/10008/list_1.json"},{"id":10010,"title":"体育","type":1,"url":"/10010/list_1.json"},{"id":10091,"title":"生活","type":1,"url":"/10091/list_1.json"},{"id":10012,"title":"旅游","type":1,"url":"/10012/list_1.json"},{"id":10095,"title":"科技","type":1,"url":"/10095/list_1.json"},{"id":10009,"title":"军事","type":1,"url":"/10009/list_1.json"},{"id":10093,"title":"时尚","type":1,"url":"/10093/list_1.json"},{"id":10011,"title":"财经","type":1,"url":"/10011/list_1.json"},{"id":10094,"title":"育儿","type":1,"url":"/10094/list_1.json"},{"id":10105,"title":"汽车","type":1,"url":"/10105/list_1.json"}]},>>>
格式化完后的格式
这里只展开一部分,作为例子,其他的完全一样
...[]data [0] []children [0] "id":10007 "title":"北京" "type":1 url:"/10007/list_1.json" [1] [2] [3] . . 省略..... . [9] id:10000; title:"新闻" type:1 [1] "id":10002 "title":"专题" "type":10 "url":/10006/list_1.json "url1":/10007/list1_1.json...[]extend...retcode:200
PS这里使用的是我自己本地的服务器,所以JSON数据可能结构不是很合理,but原理都是一样的,不多解释,
分析步骤:
1.首先拿到的是整个JSONObject对象(不管里面有什么内容,其整个数据对象是属于JSONObject的),暂且叫做jsonStr;
2.jsonStr: jsonStr中的对象有三个对象分别是data, extend和retcode, 其中data和extend是有[ ]包括的,也就是属于JSONArray数组的, retcode是一个int类型的对象
3.date元素: data是一个JSON数组对象属于整个json数据的一个对象, 要想获得data对象就要调用整个json数据的对象的getJSONObject(String name)来获取,这里的name指的是要获取JSON数组的名字 代码如下:
JSONOArray dataArray = jsonStr.getJSONArray(data)
4.date的子元素: 从HiJSON工具的目录视图中可以看出data数组中的子元素都是一个数组对象, 所以就可以通过数组的遍历来获取每一个jsonArray中的JSONObject对象
for(int i = 0; i< dataArray.length();i++){ JSONObject object = dataArray.getJSONObject(i);}
JSON格式转换成JavaBean实体类:
还以上面的json数据为例子
1.这个JSON是新闻类客户端的JSON数据, 把这个JSON的实体类叫做TabNews
2.jsonStr里面的对象有三个,分别是data和extend数组, 和int类型的retcode对象
3.data里面的数据有4个子的数组元素每个子元素对应的是新闻的栏目, 有新闻, 专题, 组图, 互动四个栏目
4.以data的第一个子元素为例子分析:a. data中有4个栏目的类型, 所以就data的上一级元素中创建一个List的集合来存放每一个data的元素, List的泛型要符合data里面子元素的内容, 这里起名叫做Menu
b.data的一个子元素里面包含了4个子元素,其中children为JSONArray类型, id, type和title为三个对应的元素标签
c.children数组有0-9个子对象, 每个对象为JSON数组, 每个对象中的json格式都是一样的, 内容如下:
"id": 10010,
"title": "体育",
"type": 1,
"url": "/10010/list_1.json"
装换成JavaBean实体类
1.首先是这个JavaBean实体类的名字, 要和json的数据内容行对应 以便于使用, 这里的是一个新闻类的并且有栏目, 和新闻分类等, 把这个实体类定义为TabNews
2,数组转换成类的时候对应的是一个List< T >集合的变量, 而一个字段对应的就是一个对应字段类型的变量,如: “id”:10007 , “title”:”北京”
这里的id对应的就是int类型的, title对应的就是String类型的
3.装换成代码就是如下:
public class TabNews{
public int retcode;
public List< Menu > data;
public List< Integer> extend;
//创建Menu内部类,对应的是data的4个直接子元素(数组类型的), Menu里面的属性就是4个子元素里面的字段的类型
public class Menu{
public int id;
public String title;
public int type;
public String url;
public String url1;
//这里是data第一个子元素里面对应的children的数组转换而来的
public List< TabItem > tabItem;
}
//data的第一个子元素是children的一个JSONArray, 里面对应的内容是一个新闻的类型, 这里创建一个TabItem类装载它
public class TabItem{
public int id;
public String title;
public int type;
public String url;
}
}
总结, 每个JSONObject中的元素分为三种,分别为: 普通的字段, JSONObject对象和JSONArray对象, 而字段转换成实体类对应的就是该实体类的一个变量, 其变量的类型就是字段对应的类型, JSONObject和JSONArray装换成实体类对应的就是该实体类的一个List< T > 集合, 该泛型就是根据其对象来定义的一个内部类, 该内部类所拥有的属性就是JSONObject或者JSONArray所拥有的字段转换成其属性,
注: 转换后属性的类型要和其字段的类型所匹配
第一次使用markdown编辑器, 用的很是生疏啊,好多格式调整,导致整篇文章格式布局有点乱, 这个编辑器和强大, 有空可以多学习一下
- android JSON数据解析分析
- android---Json数据解析
- Android Json 数据解析
- Android解析json数据
- android解析json数据
- Android-解析json数据
- Android Json数据解析
- Android解析JSON数据
- Android解析Json数据
- Android json数据解析
- android解析json数据
- android解析JSON数据
- Android解析json数据
- android Json数据解析
- android JSON数据解析
- Android 解析 Json 数据
- Android JSON数据解析
- Android JSON数据解析
- wmframework v2.0 手册(3-4-5)代码编写说明
- oracle的TM锁、TX锁
- Java代理模式
- [Android5.1]系统默认设置
- openURL
- android JSON数据解析分析
- 架构设计:系统间通信(13)——RPC实例Apache Thrift 下篇(1)
- 中文路径, 文件转换
- Redis集群架构部署(Version 3.0.7)
- Merge Two Sorted Lists
- ASP.NET 的服务器控件,GridView传多个参数
- iOS9如何调用系统通讯录
- java学习资源
- Android字符串映射找resource下资源