1.JSON解析
(1).解析Object之一:
解析方法:
1 |
JSONObject demoJson = new JSONObject(jsonString); |
2 |
String url = demoJson.getString( "url" ); |
(2).解析Object之二:
1 |
{ "name" : "android" , "name" : "iphone" } |
解析方法:
1 |
JSONObject demoJson = new JSONObject(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 = new JSONObject(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 = new JSONObject(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 = new JSONObject(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的官方说明文档进行了 ...
随机推荐
- SpringCloud IDEA 教学 (一) Eureka的简介与服务注册中心的建立
写在开头 SpringCloud进来成为业界排名靠前的微服务框架,最核心功能就是搭建微服务,并在此基础上衍生出一系列功能,如断路器(Hystrix).断路监控.管理配置.Zuul.OAuth2等功能. ...
- 2.hbase原理(未完待续)
hbase简介相关概念hmsterhregionserver表regionhstorememstorestorefilehfileblockcacheWALminorcompactmajorcompa ...
- POJ 3525/UVA 1396 Most Distant Point from the Sea(二分+半平面交)
Description The main land of Japan called Honshu is an island surrounded by the sea. In such an isla ...
- 201621044079WEEK作业08-集合
作业08-集合 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 如 ...
- Vim新手节省时间的10多个小技巧
Vim新手节省时间的10多个小技巧 Vim 是很多开发者的首选编辑器,通过设置正确的命令和快捷方式,它可以帮你更快的完成工作.这篇文章我们为 Vim 新手提供一些快捷键等方面的小技巧,帮你提升工作效率 ...
- c#控件的name和text属性有什么不同?
text 是显示出来,供用户和自己编辑方便使用的,name 属性是编辑代码用的. 比如要读取一个text栏的内容 取name='txtName' text='姓名'代码段需要写的是, txtName. ...
- Android关于注解那点事(二)
前言 上篇主要讲解了注解的基本操作,以及一个运行时注解的小例子,今天我们主要来说道说道注解中另一种实现方式,编译时注解(CLASS),不同于上篇例子的运行时注解(RUNTIME),需要在代码运行时,反 ...
- github clone 指定的tag
git clone --branch [tags标签] [git地址] 使用branch参数,后面加上tag标签,最后是git仓库的地址
- JavaScript数据类型转换方法汇总
转换为布尔型 用两次非运算(!): 1 !!5 ==> true 用布尔型的构造函数: 1 new Boolean(5) == > true 值转换为布尔类型为false:0,+0,-0, ...
- iOS AFNetworking 2.6.0框架导入报错解决方法
最近手动导入AFNetworking 2.6.0框架时发现Xcode报如下3个错误: 1. Use of undeclared identifier ‘kSecFormatUnknown‘ 2. Us ...