JSON解析
2016-05-23 17:39
225 查看
关于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")); //我们还剩下技能没有选择是不是,技能也是一个JSONArray JSONArray 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解析基本就搞懂了.
相关文章推荐
- hlConsole – 手机网页JS日志查看工具
- JavaScript基础——基本概念:数据类型及其转换
- mochiweb 、mochijson
- JavaScript实现复制或剪切内容到剪贴板功能的方法
- js 计算精度问题
- JavaScript 跨域访问的问题和解决过程
- 详解JavaScript中|单竖杠运算符的使用方法
- js实现放大缩小页面
- json解析中 opt和get的区别
- bzoj 4466 : [Jsoi2013]超立方体
- 使用bookshelf.js进行left join操作
- JSP
- javascript类学习(二)——类的私有变量、私有方法、共有变量、共有方法
- 关于Chrome调试中.min.js.map 404的问题
- JSON.stringify()、,JSON.eval(),JSON.parse()各自的区别于作用
- js提示确认删除吗
- Javascript的this用法
- js获取url参数,操作url参数
- 使用JavaScript进行进制转换将字符串转换为十进制
- javascript类学习(一)——构造器与原型链实现简单的继承