Android-json解析:原生JSONObject+JSONArray的使用【转】
原文地址:https://blog.csdn.net/sinat_31057219/article/details/71518123
一、JSONObject和JSONArray的数据表示形式
JSONObject的数据是用 { } 来表示的,
例如:
{ "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "content" : null }
而JSONArray,顾名思义是由JSONObject构成的数组,用 [ { } , { } , …… , { } ] 来表示
例如:
[{ "id" : "123", "courseID" : "huangt-test", "title" : "提交作业"},
{ "content" : null, "beginTime" : 1398873600000 "endTime" } ]
表示了包含2个JSONObject的JSONArray。
可以看到一个很明显的区别,一个最外面用的是 { } ,一个最外面用的是 [ ] ;
二、如何从字符串jsonString获得JSONObject对象和JSONArray对象
/*json字符串最外层是大括号时:*/
JSONObject jsonObject = new JSONObject(jsonStr);
/*json字符串最外层是方括号时:*/
JSONArray jsonArray = new JSONArray(jsonStr);
三、如何从JSONArray中获得JSONObject对象
遇到方括号时,就要先获取JSONArray,然后再循环遍历出JSONObject
大家可以把JSONArray当成一般的数组来对待,只是获取的数据内数据的方法不一样。
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
}
注意:
/*JSONObject 获取jsonArray :需要数组的字段名*/
JSONArray jsonArray = jsonObject.getJSONArray("children");
/*jsonArray获取JSONObject : 需要遍历数组*/
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
}
四、通过JsonObject获取JSON内的具体数据:
int mid= jsonObject.getInt ( "id" ) ;
// 这里的mid得到的数据就是123.
String mcourse=jsonObject.getString( " courseID") ;
// 这里的mcourse得到的数据就是huangt-test.
示例一:
{
"msg": "",
"code": "succeed",
"login_status": 0,
"mall_uid": "epet_0",
"mall_user": "",
"sys_time": 1494388655,
"push_alias": "",
"push_tags": "version3",
"categorys": [
{
"cateid": 53,
"name": "狗狗玩具",
"children": [
{
"type": "cateid",
"id": "210",
"name": "棉制玩具",
"photo": "http://i.epetbar.com/nowater/cates/2014-03/24/fcab37ead00d77bcdddf7dabe6c817d7.jpg"
},
{
"type": "cateid",
"id": "211",
"name": "橡胶玩具",
"photo": "http://i.epetbar.com/nowater/2016-07/21/14/874299e54a8cf1488d6b1bead8f8e9bb.jpg"
},
{
"type": "cateid",
"id": "212",
"name": "塑料玩具",
"photo": "http://i.epetbar.com/nowater/cates/2014-03/24/df1ed7120376370a4b5badaae61a0a7e.jpg"
},
{
"type": "cateid",
"id": "213",
"name": "手工玩具",
"photo": "http://i.epetbar.com/nowater/cates/2014-03/24/6709410560b999ab37ffb9747bb2ee71.jpg"
},
{
"type": "cateid",
"id": "3088",
"name": "食用玩具",
"photo": "http://i.epetbar.com/nowater/cates/2014-03/24/a5c7619872749790f6d6fd1ff3eccedc.jpg"
},
{
"type": "cateid",
"id": "4157",
"name": "木质玩具",
"photo": "http://i.epetbar.com/nowater/cates/2014-03/24/e9145de044fd5cec4c9b8ed47360d98f.jpg"
},
{
"type": "cateid",
"id": "4188",
"name": "梵米派",
"photo": "http://i.epetbar.com/nowater/cates/2015-07/28/45c339f6acb56364132b92f04b090c5c.jpg"
}
]
}
],
"topadv": {
"advid": "20605",
"src": "https://img2.epetbar.com/nowater/2017-04/05/14/19427a29344bcc0f385ca4718adca02f.jpg",
"title": "红脚丫",
"param": {
"mode": "web",
"param": "http://sale.epet.com/m/mould/activity/ztMTAzOA%3D%3D.html?tid=1038"
}
},
"owner": 53
}
解析如下:
注意:MyData类可以借助GsonFormat类生成实体类。
private List<MyData.CategorysBean.ChildrenBean> parseJSONOrgin(String string) {
List<MyData.CategorysBean.ChildrenBean> childrenBeanList = new ArrayList<MyData.CategorysBean.ChildrenBean>();
try {
JSONObject jsonObject = new JSONObject(string);
JSONArray jsonArray = jsonObject.getJSONArray("categorys");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
JSONArray children = jsonObject1.getJSONArray("children");
for (int j = 0; j < children.length(); j++) {
JSONObject jsonObject2 = children.getJSONObject(j);
MyData.CategorysBean.ChildrenBean childrenBean = new MyData.CategorysBean.ChildrenBean();
childrenBean.setName(jsonObject2.getString("name"));
childrenBean.setId(jsonObject2.getString("id"));
childrenBean.setPhoto(jsonObject2.getString("photo"));
childrenBean.setType(jsonObject2.getString("type"));
childrenBeanList.add(childrenBean);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return childrenBeanList;
}
示例二:
[
{
"id": 582490,
"name": "单车自驾:魔幻张家界",
"photos_count": 128,
"start_date": "2016-04-05",
"end_date": "2016-04-08",
"days": 4,
"level": 4,
"views_count": 55199,
"comments_count": 34,
"likes_count": 441,
"source": "web",
"front_cover_photo_url": "http://p.chanyouji.cn/582490/1468260328216p1andi510ihgkc2f5hk6rf198.jpg",
"featured": false,
"user": {
"id": 313643,
"name": "huchichi",
"image": "http://tva2.sinaimg.cn/crop.0.12.282.282.50/5c5ee839gw1ec7kq4pasrj207v08d3zv.jpg"
}
},
{
"id": 666746,
"name": "【斯里兰卡10天】跨过山和大海",
"photos_count": 122,
"start_date": "2016-12-24",
"end_date": "2017-01-02",
"days": 10,
"level": 3,
"views_count": 33023,
"comments_count": 32,
"likes_count": 471,
"source": "app",
"front_cover_photo_url": "http://p.chanyouji.cn/666746/1485787660939p1b7ntf07u16kdssn1tfl1ck1q1qd.jpg",
"featured": false,
"user": {
"id": 469471,
"name": "宇_RainyK",
"image": "http://a.chanyouji.cn/469471/1460020629.jpg"
}
},
{
"id": 665223,
"name": "上帝自留地探访 : 新西兰——快乐咔嚓声",
"photos_count": 250,
"start_date": "2016-11-30",
"end_date": "2016-12-04",
"days": 5,
"level": 3,
"views_count": 23981,
"comments_count": 30,
"likes_count": 533,
"source": "app",
"front_cover_photo_url": "http://p.chanyouji.cn/1483013211/40p8jhlx7t4e8hntyhp4z31c0.jpg",
"serial_id": 664971,
"serial_position": 1,
"featured": false,
"user": {
"id": 131541,
"name": "片儿川",
"image": "http://a.chanyouji.cn/131541/1483887153821.jpg"
}
},
{
"id": 591454,
"name": "土耳其...我喜欢你,像风走了八千里",
"photos_count": 195,
"start_date": "2016-08-08",
"end_date": "2016-08-22",
"days": 15,
"level": 3,
"views_count": 18822,
"comments_count": 42,
"likes_count": 854,
"source": "web",
"front_cover_photo_url": "http://p.chanyouji.cn/1472368913/9896F012-522E-46C4-9F29-5F6D86C790DB.jpg",
"featured": false,
"user": {
"id": 208609,
"name": "晶晶姑姑娘娘",
"image": "http://a.chanyouji.cn/208609/1493099858.jpg"
}
},
{
"id": 589708,
"name": "浪迹非洲最南——“慢得啦”国闲游之一",
"photos_count": 128,
"start_date": "2016-07-23",
"end_date": "2016-07-24",
"days": 2,
"level": 3,
"views_count": 5858,
"comments_count": 4,
"likes_count": 65,
"source": "web",
"front_cover_photo_url": "http://p.chanyouji.cn/589708/1471963416200p1aqrtl1pq8js1ek0sn913uq1kdmh.jpg",
"serial_id": 589708,
"serial_position": 0,
"featured": false,
"user": {
"id": 103122,
"name": "牵着蜗牛散步的JOY",
"image": "http://tva1.sinaimg.cn/crop.0.17.640.640.50/794bd26ajw8e7tg9nfqb5j20hs0iqmxg.jpg"
}
},
{
"id": 598966,
"name": "霓虹国/留学生 梦游记录",
"photos_count": 88,
"start_date": "2016-08-28",
"end_date": "2017-05-07",
"days": 253,
"level": 3,
"views_count": 16648,
"comments_count": 10,
"likes_count": 72,
"source": "app",
"front_cover_photo_url": "http://p.chanyouji.cn/1476365877/C9B59738-58E8-47C9-BCD1-5F2AC5CC9526.jpg",
"featured": false,
"user": {
"id": 694154,
"name": "Y-dec",
"image": "http://q.qlogo.cn/qqapp/100277927/5475C47B95A36891E2698462184F8785/100"
}
},
{
"id": 544528,
"name": "【我的年假】7 重庆—吃一顿地道火锅",
"photos_count": 385,
"start_date": "2016-08-31",
"end_date": "2016-09-03",
"days": 4,
"level": 3,
"views_count": 37214,
"comments_count": 55,
"likes_count": 530,
"source": "app",
"front_cover_photo_url": "http://p.chanyouji.cn/544528/1474011393910p1asoupfpujrj1rnd5o813qo1jvi5.jpg",
"serial_id": 544528,
"serial_position": 0,
"featured": false,
"user": {
"id": 17010,
"name": "马兰头头2010",
"image": "http://a.chanyouji.cn/17010/1426768814.jpg"
}
},
{
"id": 665311,
"name": "就该这么玩【北海道】",
"photos_count": 118,
"start_date": "2016-12-05",
"end_date": "2016-12-12",
"days": 8,
"level": 3,
"views_count": 24644,
"comments_count": 6,
"likes_count": 108,
"source": "app",
"front_cover_photo_url": "http://p.chanyouji.cn/1484295471/E2B2C32A-C910-490F-9F13-BC9D3B118C1B.jpg",
"featured": false,
"user": {
"id": 544219,
"name": "炘仔~",
"image": "http://a.chanyouji.cn/544219/1489641072.jpg"
}
},
{
"id": 668998,
"name": "漫步成都一一我的寻(熊)猫之旅",
"photos_count": 108,
"start_date": "2017-02-06",
"end_date": "2017-02-12",
"days": 7,
"level": 3,
"views_count": 15222,
"comments_count": 30,
"likes_count": 146,
"source": "app",
"front_cover_photo_url": "http://p.chanyouji.cn/1487129075/720F81CB-EE64-4681-8564-A9A6864AAD33.jpg",
"featured": false,
"user": {
"id": 261578,
"name": "小柠12345",
"image": "http://tva1.sinaimg.cn/crop.27.0.238.238.50/bb9ff9e8gw1eggbljiopfj208w06oaam.jpg"
}
},
{
"id": 297060,
"name": "「吃遍日本」大阪·神户·名古屋",
"photos_count": 125,
"start_date": "2015-04-25",
"end_date": "2015-05-02",
"days": 8,
"level": 4,
"views_count": 56384,
"comments_count": 121,
"likes_count": 948,
"source": "web",
"front_cover_photo_url": "http://p.chanyouji.cn/297060/1440912374444p19tuh3ukup7t1l5c1j0u8r6kfs2.jpg",
"featured": false,
"user": {
"id": 312316,
"name": "CaitlinGao",
"image": "http://tva3.sinaimg.cn/crop.0.0.640.640.50/96246e0bjw8ensjycmsdmj20hs0hsjs7.jpg"
}
}
]
解析如下:
注意:最外层是个方括号。
private List<News> parseJSONOrgin(String json) {
List<News> list = new ArrayList<News>();
try {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
News news = new News();
news.setSource(jsonObject.getString("source"));
news.setFront_cover_photo_url(jsonObject.getString("front_cover_photo_url"));
news.setName(jsonObject.getString("name"));
news.setStart_date(jsonObject.getString("start_date"));
list.add(news);
}
} catch (JSONException e) {
e.printStackTrace();
}
return list;
}
JSONObject获取Float Double类型数据的准确性:
原始数据:{"status":0,"result":[{"x":114.2307489832,"y":29.579081808346}]}
logger.error(obj.getFloatValue("x"));
114.23075
logger.error(obj.getDoubleValue("x"));
114.23075103759766
以上2个方法都无法获得完全一致的数值。
Double.valueOf(obj.get("x").toString())
//这段代码可以准确的获取对应数值。
示例:
homeTopBannerModel.slide_time =Float.valueOf(jSONObjectTopSlide.get("slide_time").toString());
Android-json解析:原生JSONObject+JSONArray的使用【转】的更多相关文章
- android JSON解析之JSONObject与GSON
1.写在前面 JSON数据是android网络开发中常见的数据格式,JSON最常见的传输方法是使用HTTP协议,关于android开发中HTTP协议的使用方法可参考我的另一篇随笔android网络编程 ...
- android json解析(JSONObject方法实现)
今天刚刚学到json解析,看了一整天,大概了解到json就是你通过一个API(我用的聚合数据的API)发送一个请求,接着会收到json数据,比如说天气预报吧,他会给你发送一大段字符串,大概是未来几天的 ...
- java 字符串解析为json 使用org.json包的JSONObject+JSONArray
参考: https://blog.csdn.net/xingfei_work/article/details/76572550 java中四种json解析方式 JSONObject+JSONArray ...
- Android Json解析与总结
一.JSON定义 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...
- Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例
Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...
- android json 解析简单实例
Android JSON解析跟JAVA 的JSON解析原理是一样的. Android自带的JSON方式跟方便,不需要导包啥的.不深究原理了,直接上代码: public class JsonActivi ...
- Android JSON 解析关键代码
Android Json 解析其实还是蛮重要的知识点,为什么这么说呢,因为安卓通信大部分的协议都是使用 json 的方式传输,我知道以前大部分是使用的 xml ,但是时代在发展社会在进步,json 成 ...
- android json解析及简单例子+Android与服务器端数据交互+Android精彩案例【申明:来源于网络】
android json解析及简单例子+Android与服务器端数据交互+Android精彩案例[申明:来源于网络] android json解析及简单例子:http://www.open-open. ...
- android json解析及简单例子
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...
随机推荐
- elasticsearch 外网访问9200端口访问
可以访问127.0.0.1:9200,但不能访问 公网IP:9200 后面ip就是127.0.0.1的局域网ip,如何解决? 修改配置文件 config/elasticsearch.yml netwo ...
- mysql的DATE_FORMAT参数格式
mysql有个字段是DATETIME类型,要实现可以按月统计,该怎么写sql语句?select month(f1) from tt group by month(f1)or select DATE_F ...
- SPSS中文版安装
我这里安装的是64位的 双击安装包 选择您的安装目录 在这里等几分钟 重要!安装完毕后将图中选项勾去掉! 这个时候输入一下授权码 9DNCAF2O3QVDV7FBIO696OO6GWLNXZPPRYT ...
- Centos7基于容器安装运行Docker私有仓库及添加认证
一.前言 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候,我们的使用场景需要我们拥有一个私有的镜像仓库用于管理 ...
- 6.6安装编译安装zabbix3.2
添加yum源 get -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo #安装阿里云y ...
- Vsftp的PASV mode(被动模式传送)和Port模式及 Linux下VsFTP配置全方案
什么叫做PASV mode(被动模式传送)?他是如何工作的? FTP的连接一般是有两个连接的,一个是客户程和服务器传输命令的,另一个是数据传送的连接.FTP服务程序一般会支持两种不同的模式,一种是Po ...
- Nginx80端口转发+域名——实现IP+端口隐藏
一.目的1.相信大家会遇到这样的问题:当一台服务器部署多个tomcat应用时,当我们访问tomcat时,需要在浏览器中输入服务器IP+端口号,这看起来非常的low. 二. 环境 1台服务服务器 假如I ...
- 剑指Offer(四):重建二叉树
说明: 1.本系列是根据<剑指Offer>这个系列做的一个小笔记. 2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难. 3.刚开始准备刷LeetCode.LintCode ...
- QT编写TCP入门+简单的实际项目(附源程序)
我个人感觉学习QT不需要那么深入的了解,因为我就是编写一下界面来实现理想的功能而已,我不是靠这个吃饭,当然以后要是从事这个方向那就好好深入底层好好学了. 学习QT的TCP:第一步:去百度看看TCP的介 ...
- [Unity插件]Lua行为树(七):行为树嵌套
在上一篇的基础上,可以测试下行为树的嵌套,所谓的行为树嵌套,就是在一棵行为树下的某一个分支,接入另一棵行为树. 以下面这棵行为树为例: TestBehaviorTree2.lua TestBehavi ...