1.JSON解析
     (1).解析Object之一:

  解析方法:

1 JSONObject demoJson = newJSONObject(jsonString);
2 String url = demoJson.getString("url");

  (2).解析Object之二:

1 {"name":"android","name":"iphone"}

  解析方法:

1 JSONObject demoJson = newJSONObject(jsonString);
2 String name = demoJson.getString("name");
3 String version = demoJson.getString("version");
4 System.out.println("name:"+name+",version:"+version);

     (3).解析Array之一:

1 {"number":[1,2,3]}

   解析方法:

1 JSONObject demoJson = newJSONObject(jsonString);
2 JSONArray numberList = demoJson.getJSONArray("number");
3 for(int i=0; i<numberList.length(); i++){
4     //因为数组中的类型为int,所以为getInt,其他getString,getLong同用
5     System.out.println(numberList.getInt(i));
6 }

  (4).解析Array之二:

1 {"number":[[1],[2],[3]]}

  解析方法:

1 //嵌套数组遍历
2 JSONObject demoJson = newJSONObject(jsonString);
3 JSONArray numberList = demoJson.getJSONArray("number");
4 for(int i=0; i<numberList.length(); i++){
5       //获取数组中的数组
6       System.out.println(numberList.getJSONArray(i).getInt(0));
7 }

  (5).解析Object和Array:

1 {"mobile":[{"name":"android"},{"name":"iphone"}]}

  解析方法:

1 JSONObject demoJson = newJSONObject(jsonString);
2 JSONArray numberList = demoJson.getJSONArray("mobile");
3 for(int i=0; i<numberList.length(); i++){
4       System.out.println(numberList.getJSONObject(i).getString("name"));
5 }

  所以,我们发现get后面接着的是你想要的得到的结果的类型:getType,这个对理解很有帮助。
     (6).使用optType:
     
上面的例子,使用getType在碰到查找不到节点的时候,会抛出异常。
      如果使用optType,找不到节点,则返回null或者默认值。

1 //无url节点,抛出异常
2 String url = demoJson.getString("url");
3 //无url节点,返回空,如果为基本类型,则返回默认值
4 String url = demoJson.optString("url");

  (7).UTF-8的BOM头导致解析JSON异常的问题
      到json文件保存为utf-8的时候,在windows平台下,会产生bom头"EF BB EF"字节在文本的最前面(需要用十六进制工具打开才能看的到)。
      有两种解决方法:
      a.使用UltraEdit打开json文件, 另存为的时候,选择格式UTF-8,无BOM头,如果还不行,在用记事本打开,另存为UTF-8下,多试几次就可以了。
      b.使用代码处理,截取json主体内容:

1 String jsonString = getJsonString();
2 jsonString = jsonString.substring(jsonString.indexOf("{"),jsonString.lastIndexOf("}")+1);

2.JSON必知
     (1).JSON是一种轻量级的数据交换格式
     (2).JSON基于两种数据结构:Object和Array。其中Object是“名称/值”对的集合。
     (3).对象:大括号,每一组string-value结合以","分隔,string和value以冒号分隔。
 
     (4).数组:

     (5).string由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。

     (6).value可以是双引号括起来的字符串(string)、数值(number)、truefalse、 null、对象(object)或者数组(array)。这些结构可以嵌套。

     (7).空白可以加入到任何符号之间,包括空格,tab,回车,换行等。
     (8).举例:
       a.Object实例:

01 {
02      "Image": {
03       "Width":  800,
04       "Height": 600,
05       "Title""View from 15th Floor",
06       "Thumbnail": {
07           "Url":   "http://www.example.com/image/481989943",
08           "Height": 125,
09           "Width""100"
10       },
11       "IDs": [116, 943, 234, 38793]
12     }
13 }

 b.Array实例:

01 [
02    {
03       "precision":"zip",
04       "Latitude":  37.7668,
05       "Longitude": -122.3959,
06       "Address":  "",
07       "City":     "SAN FRANCISCO",
08       "State":    "CA",
09       "Zip":      "94107",
10       "Country":  "US"
11    },
12    {
13       "precision":"zip",
14       "Latitude":  37.371991,
15       "Longitude": -122.026020,
16       "Address":  "",
17       "City":     "SUNNYVALE",
18       "State":    "CA",
19       "Zip":      "94085",
20       "Country":  "US"
21    }
22 ]

3.小结
      很简单 ,很基础,积水方能成江,累砖才可筑楼。

接下来举两个实际的例子:
;i<jsonArray.length();i++){ 
                        JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i); 
                        CalendarInfo calendarInfo = new CalendarInfo(); 
                        calendarInfo.setCalendar_id(jsonObject2.getString("calendar_id")); 
                        calendarInfo.setTitle(jsonObject2.getString("title")); 
                        calendarInfo.setCategory_name(jsonObject2.getString("category_name")); 
                        calendarInfo.setShowtime(jsonObject2.getString("showtime")); 
                        calendarInfo.setEndtime(jsonObject2.getString("endshowtime")); 
                        calendarInfo.setAllDay(jsonObject2.getBoolean("allDay")); 
                        calendarInfos.add(calendarInfo); 
                    }

总结,普通形式的只需用JSONObject ,带数组形式的需要使用JSONArray 将其变成一个list。

转:http://blog.163.com/tuchengju@126/blog/static/38071165201162254625961/

关注公众号,分享干货,讨论技术

android之解析json数据格式详解的更多相关文章

  1. java解析json字符串详解(两种方法)

    一.使用JSONObject来解析JSON数据官方提供的,所以不需要导入第三方jar包:直接上代码,如下 private void parseJSONWithJSONObject(String Jso ...

  2. JavaScript如何处理解析JSON数据详解

    JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON ...

  3. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  4. 最强常用开发库总结 - JSON库详解

    最强常用开发库总结 - JSON库详解 JSON应用非常广泛,对于Java常用的JSON库要完全掌握.@pdai JSON简介 JSON是什么 JSON 指的是 JavaScript 对象表示法(Ja ...

  5. [Android新手区] SQLite 操作详解--SQL语法

    该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法  :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...

  6. Android Animations 视图动画使用详解!!!

    转自:http://www.open-open.com/lib/view/open1335777066015.html Android Animations 视图动画使用详解 一.动画类型 Andro ...

  7. Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

    Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...

  8. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  9. Angular Npm Package.Json文件详解

    Angular7 Npm Package.Json文件详解   近期时间比较充裕,正好想了解下Angular Project相关内容.于是将Npm官网上关于Package.json的官方说明文档进行了 ...

随机推荐

  1. SpringBoot日志配置(详解) 涉及控制台输出日志、生成日志文件、日志级别修改、hibernate日志不输出

    写在前面 本篇主要讲述日志配置,看完本篇可以解决下述问题, 控制台输出日志.生成日志文件.日志级别修改.hibernate日志不输出 Git Demo Path:https://github.com/ ...

  2. 【转载】inotify+rsync实时同步 解决同步慢问题 (转载备记)

    原文地址:http://www.ttlsa.com/web/let-infotify-rsync-fast/ 背景 我们公司在用inotify+rsync做实时同步,来解决分布式集群文件一致性的问题. ...

  3. File Searching

    Description Have you ever used file searching tools provided by an operating system? For example, in ...

  4. Java学习个人备忘录之多线程

    进程:正在进行中的程序(直译). 线程:就是进程中一个负责程序执行的控制单元(执行路径) 一个进程中可以有多个执行路径,称之为多线程. 一个进程中至少要有一个线程. 开启多个线程是为了同时运行多部分代 ...

  5. 软工1816 · Alpha冲刺(1/10)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 前后端代码规范统一 针对之前的alpha冲刺安排进一步细化任务卡片 明确apl ...

  6. 《剑指offer》---丑数

    本文算法使用python3实现 1. 问题1 1.1 题目描述:   把只包含因子2.3和5的数称作丑数(Ugly Number).判断一个数是否是丑数.   时间限制:1s:空间限制:32768K ...

  7. lintcode-151-买卖股票的最佳时机 III

    151-买卖股票的最佳时机 III 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格.设计一个算法来找到最大的利润.你最多可以完成两笔交易. 注意事项 你不可以同时参与多笔交易(你必须在 ...

  8. 记一次dll强命名冲突事件

    一  问题的出现 现在要做一个net分布式平台,平台涉及多个服务之间调用问题,最基础的莫过于sso.由于我们的sso采用了wcf一套私有框架实现,另外一个webapi服务通过接口调用sso服务.由于s ...

  9. tc:逼良为娼

    tc的学习原来是想着直接从用户态学习的,但是万万没想到哇,qdisc class两个概念直接把我给搞晕了,直接看代码吧 调用:tc qdisc add dev tap0 root handle 1: ...

  10. 在临床医学里面,bid、tid、qid和q3w是什么意思啊??这些缩写的全称是怎么写呢??

    { value: 'QD', name: 'QD 每日一次' }, { value: 'BID', name: 'BID 每日两次' }, { value: 'TID', name: 'TID 每日三 ...