关于Json解析(org.json.JSONObject)


小感慨:踏入编程界有一段时间了,至今连Json解析都不会,平时遇到Json字符串都闲麻烦,直接用String类中的方法进行截取。所谓人无远虑,必有近忧,以前的数据量不是很大,截取还是可以滴,现在数据量变大了,看来再截取已经不是那样了,So…研究了一下Json解析,发觉还是很好用的,果然,Json解析,还是用配套的工具舒服,不多说啦,我研究了集中Json格式的解析方法

1. 普通的Json对象

{“c”:0,”m”:”120”,”d”:”KJSYRMOVMSOEMB==-FNE”}

如上所示,这就是一个最简单的一个Json对象

JSONObject jsonObj = new JSONObject("{"c":0,"m":"120","d":"KJSYRMOVMSOEMB==-FNE"}");

Log.i("RedWolf","C= "+jsonObj.getInt("c")+" M= "+jsonObj.getString("m")+" D= "+jsonObj.getString("d"));

就这么简单,就把这个Json对象解析出来了,当然,这只是最简单的一种情况

2. Json数组

[{“name”:”盖伦”,”sex”:”男”,”r”:”大宝剑”},{“name”:”蛮王”,”sex”:”男”,”r”:”野蛮冲撞”}]

如上所示,是一个Json数组,里面有两个Json对象

        //把指定的Json转换成字符串数组JSONArray jsonArray = new JSONArray("[{\"name\":\"盖伦\",\"sex\":\"男\",\"r\":\"大宝剑\"},{\"name\":\"蛮王\",\"sex\":\"男\",\"r\":\"野蛮冲撞\"}]");//第一个里面装的是盖伦 第二个里面装的是蛮王for (int i = 0; i < jsonArray.length(); i++) {JSONObject jsonObject = (JSONObject) jsonArray.opt(i);DebugUtil.LogI("RedWolf", "姓名:" + jsonObject.getString("name") + " 大招:" + jsonObject.getString("r") + " 性别:" + jsonObject.get("sex"));}

输出结果

05-23 16:16:38.579 31125-31125/com.red.wolf I/RedWolf: 姓名:盖伦 大招:大宝剑 性别:男

05-23 16:16:38.579 31125-31125/com.red.wolf I/RedWolf: 姓名:蛮王 大招:野蛮冲撞 性别:男

也是很简单的,我们继续…

3. Json对象与Json数组相结合

{“name”:”盖伦”,”sex”:”男”,”skill”:[{“name”:”审判”,”info”:”无敌风火轮”},{“name”:”德玛西亚正义”,”info”:”大宝剑”}],”address”:”德玛西亚”}

如上所示,是一个Json对象里面又包含了一个Json数组

原理:先把直接能取出来的取出来,然后再取出数组

    try {String json = "{\"name\":\"盖伦\",\"sex\":\"男\",\"skill\":[{\"name\":\"审判\",  \"info\":\"无敌风火轮\"},{\"name\":\"德玛西亚正义\",\"info\":\"大宝剑\"}],    \"address\":\"德玛西亚\"}";// 同样 把字符转变为JsonObject对象JSONObject jsonObject = new JSONObject(json);//在这里我们就可以取出我们的姓名,性别和所属势力对不对 各位?StringBuffer sb = new StringBuffer();sb.append("姓名:" + jsonObject.getString("name"));sb.append(" 性别:" + jsonObject.getString("sex"));sb.append(" 所属势力:" + jsonObject.getString("address"));//然后我们从这个JsonObject对象中取出我们的JsonArray对象JSONArray jsonArray = jsonObject.getJSONArray("skill");for (int i = 0; i < jsonArray.length(); i++) {JSONObject jsonObjectSkill = (JSONObject) jsonArray.opt(i);sb.append(" 技能名:" + jsonObjectSkill.getString("name") + " 技能描述:" + jsonObjectSkill.getString("info"));}DebugUtil.LogI("RedWolf", sb.toString());} catch (JSONException e) {DebugUtil.LogI("RedWolf","异常"+e);}

输出结果:

05-23 16:39:32.911 31125-31125/com.red.wolf I/RedWolf: 姓名:盖伦 性别:男 所属势力:德玛西亚 技能名:审判 技能描述:无敌风火轮 技能名:德玛西亚正义 技能描述:大宝剑

4.综合型

[{“name”:”盖伦”,”sex”:”男”,”skill”:[{“name”:”审判”,”info”:{“mp”:”不消耗”,”type”:”AD伤害”}},{“name”:”德玛西亚正义”,”info”:{“mp”:”不消耗”,”type”:”魔法伤害,对大反派造成真实伤害”}}],”address”:”德玛西亚”},{“name”:”拉克丝”,”sex”:”女”,”skill”:[{“name”:”光之束缚”,”info”:{“mp”:”消耗”,”type”:”AP伤害”}},{“name”:”透光奇点”,”info”:{“mp”:”消耗”,”type”:”AP伤害”}}],”address”:”德玛西亚”}]

很多是不?我们按部就班的来就很简单

1. 取出两个英雄

2. 取出英雄名,性别,以及所属势力

3. 取出两个技能

4. 取出技能名,技能描述

5. 取出技能描述

6. 取出是否耗蓝和伤害类型

接下来上代码:

String json = "[{\"name\":\"盖伦\",\"sex\":\"男\",\"skill\":[{\"name\":\"审判\",\"info\":{\"mp\":\"不消耗\",\"type\":\"AD伤害\"}},{\"name\":      \"德玛西亚正义\",\"info\":{\"mp\":\"不消耗\",\"type\":\"魔法伤害,对大反派造成真实伤害\"}}],\"address\":\"德玛西亚\"},{\"name\":\"拉克丝       \",\"sex\":\"女\",\"skill\":[{\"name\":\"光之束缚\",\"info\":{\"mp\":\"消耗\",\"type\":\"AP伤害\"}},{\"name\":\"透光奇点\",\"info\":     {\"mp\":\"消耗\",\"type\":\"AP伤害\"}}],\"address\":\"德玛西亚\"}]";//由于他的最外部是一个数组,所以 首先 我们需要得到两个JsonArray//(0)盖伦 {"name":"盖伦","sex":"男","skill":[{"name":"审判","info":{"mp":"不消耗","type":"AD伤害"}},{"name":"德玛西亚正义","info":{"mp":"不消       耗","type":"魔法伤害,对大反派造成真实伤害"}}],"address":"德玛西亚"}//(1)拉克丝 {"name":"拉克丝","sex":"女","skill":[{"name":"光之束缚","info":{"mp":"消耗","type":"AP伤害"}},{"name":"透光奇点","info":{"mp":"消       耗","type":"AP伤害"}}],"address":"德玛西亚"}JSONArray jsonArray = new JSONArray(json);for (int i = 0; i < jsonArray.length(); i++) {//依次取出JSONObject jsonObject = (JSONObject) jsonArray.opt(i);StringBuffer sb = new StringBuffer();sb.append("姓名:" + jsonObject.getString("name"));sb.append(" 性别:" + jsonObject.getString("sex"));sb.append(" 所属势力:" + jsonObject.getString("address"));//我们还剩下技能没有选择是不是,技能也是一个JSONArrayJSONArray jsonArray1 = jsonObject.getJSONArray("skill");//我们就得到了(盖伦为例)//{"name":"审判","info":{"mp":"不消耗","type":"AD伤害"}}//{"name":"德玛西亚正义","info":{"mp":"不消耗","type":"魔法伤害,对大反派造成真实伤害"}}for (int i1 = 0; i1 < jsonArray1.length(); i1++) {JSONObject jsonObject1 = (JSONObject) jsonArray1.opt(i1);sb.append(" 技能名:" + jsonObject1.getString("name"));//然后我们发现 技能描述也是一个JsonObject对象,现在我们就已经轻车熟路了吧JSONObject jsonObject2 = jsonObject1.getJSONObject("info");//我们就得到了(盖伦为例)//{"mp":"不消耗","type":"AD伤害"}sb.append(" 是否耗蓝:" + jsonObject2.getString("mp"));sb.append(" 伤害类型:" + jsonObject2.getString("type"));}DebugUtil.LogI("RedWolf", sb.toString());sb = new StringBuffer();}

当然,最后的打印结果也是想象之中的

05-23 17:26:58.477 14655-14655/com.red.wolf I/RedWolf: 姓名:盖伦 性别:男 所属势力:德玛西亚 技能名:审判 是否耗蓝:不消耗 伤害类型:AD伤害 技能名:德玛西亚正义 是否耗蓝:不消耗 伤害类型:魔法伤害,对大反派造成真实伤害

05-23 17:26:58.477 14655-14655/com.red.wolf I/RedWolf: 姓名:拉克丝 性别:女 所属势力:德玛西亚 技能名:光之束缚 是否耗蓝:消耗 伤害类型:AP伤害 技能名:透光奇点 是否耗蓝:消耗 伤害类型:AP伤害

OK,走完这四步,Json解析基本就搞懂了.

关于Json解析(org.json.JSONObject)相关推荐

  1. android json 解析图片,JSON解析并获取android中的图像

    我想解析包含字符串和图像的JSON对象.我的代码正在工作,但它加载图像太慢.我想加载另一个asynctask或服务的图像,以减少加载时间.我怎样才能做到这一点?哪一个是最好的方法使用asynctask ...

  2. 简单json解析(org.json解析方式)

    简单json解析 json解析方式:org.json json数据 org.json依赖 ​ org.json ​ json ​ ${json.version} json解析程序 (1) 创建Vehi ...

  3. 【JSON解析】JSON解析

    前三篇博客分别介绍了xml的三种解析方法,分别是SAX,DOM,PULL解析XML,兴趣的朋友可以去看一下这[XML解析(一)]SAX解析XML,[XML解析(二)]DOM解析XML,[XML解析(三 ...

  4. JSON解析:JSON对象还能这样???

    自信平生无愧事,死后方敢对青天. 有目录,不迷路 前言 缘由 转换 蹊径 前言 愉快的(3+7=8的)中秋国庆假期已经接近尾声,特此写篇博客聊以记录学习过程尽早进入学习状态,也便不陷入假期综合征,使得 ...

  5. hive之Json解析(普通Json和Json数组)

    一.数据准备 现准备原始json数据(test.json)如下: {"movie":"1193","rate":"5", ...

  6. python3 json解析_Python3 JSON编码解码方法详解

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数 ...

  7. json解析工具(json解析工具 python)

    常用的xml,json解析工具有哪些 1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可 ...

  8. android json解析异常,json数据解析异常而导致网络请求失败的解决办法(其一)

    问题概述 笔者在开发过程中临时遇到一个本来仅有web端的项目临时增加Android端,导致后端在出接口时并未考虑Android端的json数据的解析,导致接口是这样的.... 正确请求 { " ...

  9. php在线json解析,PHP JSON 解析

    PHP JSON 解析 在本教程中,您将学习如何在PHP中编码和解码JSON数据. 什么是JSON JSON表示 JavaScript Object Notation.JSON是一种标准的轻量级数据交 ...

最新文章

  1. 最大民科组织被取缔,鸡蛋返生、推翻相对论、量子速读都是他们干的
  2. mysql监控内存cpu使用率_监控 cpu 内存 网卡的使用情况的一个命令 比较实用
  3. java 封装优化工具_利用Java注解的简单封装的一次优化
  4. C语言实现ternary search三分查找算法(附完整源码)
  5. SLAM中有关占据栅格地图的的表示方法和利用激光传感器构建占据栅格地图的方法
  6. Jmeter之BeanShell
  7. 年过35岁的程序员都去哪了?一张图道尽老程序员们的花样出路
  8. JavaScipt30(第八个案例)(主要知识点:canvas)
  9. 链表最终总结【数据结构】
  10. 多线程下HttpContext.Current 的问题
  11. jQuery教程06-基本筛选选择器
  12. 高并发整体可用性:大规模集群下的分片管理策略
  13. java设置面板的大小_java – 设置面板的大小
  14. zabbix报警系统docker部署,k8s部署,基本使用方法
  15. win10任务栏透明_几款软件让你的 Win10 与众不同(简洁篇)
  16. 于朦胧 机器人_机器人演戏?建议于朦胧陈钰琪这部《两世欢》改名:我的面瘫男友...
  17. 元宇宙火了,智能家居跟不跟?
  18. halcon修改图像的灰度值
  19. 泰拉瑞亚服务器一直显示什么,《泰拉瑞亚》Steam联机总是掉?教你一个稳定联机方法...
  20. 成都、九寨、黄龙、都江堰之成都

热门文章

  1. 准确率99.9%的离线IP地址定位库
  2. mysql 数据文件_mysql的数据文件
  3. 计算机二级试题aoa,计算机二级AOA理论题库
  4. perror和strerror的使用和区别
  5. python===range()函数
  6. 从网页复制图片到word不显示的解决办法
  7. OLED显示材料的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. Java EE架构师认证
  9. mysql 多表 结构相同 查询
  10. linux下不让使用rm命令