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 |
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)); |
(4).解析Array之二:
1 |
{"number":[[1],[2],[3]]} |
解析方法:
2 |
JSONObject demoJson = newJSONObject(jsonString); |
3 |
JSONArray numberList = demoJson.getJSONArray("number"); |
4 |
for(int i=0; i<numberList.length(); i++){ |
6 |
System.out.println(numberList.getJSONArray(i).getInt(0)); |
(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")); |
所以,我们发现get后面接着的是你想要的得到的结果的类型:getType,这个对理解很有帮助。
(6).使用optType:
上面的例子,使用getType在碰到查找不到节点的时候,会抛出异常。
如果使用optType,找不到节点,则返回null或者默认值。
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)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

(7).空白可以加入到任何符号之间,包括空格,tab,回车,换行等。
(8).举例:
a.Object实例:
05 |
"Title": "View from 15th Floor", |
11 |
"IDs": [116, 943, 234, 38793] |
b.Array实例:
05 |
"Longitude": -122.3959, |
07 |
"City": "SAN FRANCISCO", |
14 |
"Latitude": 37.371991, |
15 |
"Longitude": -122.026020, |
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/
关注公众号,分享干货,讨论技术

- java解析json字符串详解(两种方法)
一.使用JSONObject来解析JSON数据官方提供的,所以不需要导入第三方jar包:直接上代码,如下 private void parseJSONWithJSONObject(String Jso ...
- JavaScript如何处理解析JSON数据详解
JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧. JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- 最强常用开发库总结 - JSON库详解
最强常用开发库总结 - JSON库详解 JSON应用非常广泛,对于Java常用的JSON库要完全掌握.@pdai JSON简介 JSON是什么 JSON 指的是 JavaScript 对象表示法(Ja ...
- [Android新手区] SQLite 操作详解--SQL语法
该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法 :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...
- Android Animations 视图动画使用详解!!!
转自:http://www.open-open.com/lib/view/open1335777066015.html Android Animations 视图动画使用详解 一.动画类型 Andro ...
- Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送
Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- Angular Npm Package.Json文件详解
Angular7 Npm Package.Json文件详解 近期时间比较充裕,正好想了解下Angular Project相关内容.于是将Npm官网上关于Package.json的官方说明文档进行了 ...
随机推荐
- MongoDB Sharding 机制分析
MongoDB Sharding 机制分析 MongoDB 是一种流行的非关系型数据库.作为一种文档型数据库,除了有无 schema 的灵活的数据结构,支持复杂.丰富的查询功能外,MongoDB 还自 ...
- 2017秋软工1 - 本周PSP
1.本周PSP 2. 本周PSP饼状图 3. 本周进度条 4. 累计进度图
- 项目选题报告(I konw)
一.团队成员及分工 团队名称:I know 团队成员: 陈家权:选题报告word撰写 赖晓连:ppt制作,原型设计 雷晶:ppt制作,原型设计 林巧娜:原型设计,博客随笔撰写 庄加鑫:选题报告word ...
- 【IdentityServer4文档】- 整体情况
整体概况 大多数现代应用程序看起来或多或少像这样: 最常见的交互是: 浏览器与 Web 应用程序进行通信 Web 应用程序与 Web API 进行通信(有时是Web应用程序自己发起,有时代表用户发起) ...
- HTTP 请求头 & 响应头
HTTP请求头概述 HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST).如有必要,客户程序还可以选择发送其他的请求头.大多数请求头并不是必需的, 但Co ...
- LintCode-211.字符串置换
字符串置换 给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换. 置换的意思是,通过改变顺序可以使得两个字符串相等. 样例 "abc" 为 "cb ...
- HDU 2124 Repair the Wall
http://acm.hdu.edu.cn/showproblem.php?pid=2124 Problem Description Long time ago , Kitty lived in a ...
- 【PHP】- PHPStorm+XDebug进行调试图文教程
转载:https://www.cnblogs.com/LWMLWM/p/8251905.html 这篇文章主要为大家详细介绍了PHPStorm+XDebug进行调试图文教程,内容很丰富,具有一定的 ...
- oracle RAC集群启动和关闭
oracle 11G RAC集群启动和关闭:1.停止数据库$srvctl stop database –d oradb2.停止集群服务关闭集群需要root运行#/u01/11.2.0/grid/bin ...
- 通过设置窗体的AcceptButton属性,可以设置窗体的“接受”按钮,若此设计,则用户每次按下Enter键都相当于单击该按钮
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...