JSON

Android 解析JSON数据格式

字号+ 作者:H5之家 来源:H5之家 2017-06-26 18:04 我要评论( )

1、JSON数据格式 ? ?* JSON(JavaScript?Object Notation)一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式,这意味着在

1、JSON数据格式 ? ?* JSON(JavaScript?Object Notation)一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式,这意味着在...

1、JSON数据格式

? ?* JSON(JavaScript?Object Notation)一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。?

? ?* JSON的规则很简单:对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。

? ? ?规则如下:

? ? ? ?1.?映射用冒号(“:”)表示。名称:值。

? ? ? ?2.?并列的数据之间用逗号(“,”)分隔。

? ? ? ?3.?映射的集合(对象)用大括号(“{}”)表示。

? ? ? ?4.?并列数据的集合(数组)用方括号(“[]”)表示。

? ? ? ?5.?元素值可具有的类型:string,?number,?object,?array,?true,?false,?null。?

? ?* 解析JSON

JSON?只是一种文本字符串。它被存储在responseText属性中

为了读取存储在responseText属性中的?JSON?数据,需要根据JavaScript的eval语句。

函数eval会把一个字符串当作它的参数。然后这个字符串会被当作JavaScript代码来执行。因为JSON的字符串就是由JavaScript代码构成的,所以它本身是可执行的。

一、什么是json

json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服 务器的数据交换格式往往通过json来进行交换。尤其是对于web开发来说,json数据格式在客户端直接可以通过javascript来进行解析。

json一共有两种数据结构,一种是以 (key/value)对形式存在的无序的jsonObject对象,一个对象以“{”(左花括号)开始,“}”(右花括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

Android 解析JSON数据格式

例如:{"name": "xiaoluo"}, 这就是一个最简单的json对象,对于这种数据格式,key值必须要是string类型,而对于value,则可以是string、number、object、array等数据类型:

Android 解析JSON数据格式

另一种数据格式就是有序的value的集合,这种形式被称为是jsonArray,数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

Android 解析JSON数据格式

?

更多的有关json数据格式可以参加json的官网,

json数据格式解析我自己分为两种;

一种是普通的,一种是带有数组形式的;


?

普通形式的:
服务器端返回的json数据格式如下:

{"userbean":{"Uid":"100196","Showname":"\u75af\u72c2\u7684\u7334\u5b50","Avtar":null,"State":1}}

分析代码如下:

//?TODO?状态处理?500?200?
????????????????int?res?=?0;?
????????????????res?=?httpClient.execute(httpPost).getStatusLine().getStatusCode();?
????????????????if?(res?==?200)?{?
????????????????????/*?
?????????????????????*?当返回码为200时,做处理?
?????????????????????*?得到服务器端返回json数据,并做处理?
?????????????????????*?*/?
????????????????????HttpResponse?httpResponse?=?httpClient.execute(httpPost);?
????????????????????StringBuilder?builder?=?new?StringBuilder();?
????????????????????BufferedReader?bufferedReader2?=?new?BufferedReader(?
????????????????????????????new?InputStreamReader(httpResponse.getEntity().getContent()));?
????????????????????String?str2?=?"";?
????????????????????for?(String?s?=?bufferedReader2.readLine();?s?!=?null;?s?=?bufferedReader2?
????????????????????????????.readLine())?{?
????????????????????????builder.append(s);?
????????????????????}?
????????????????????Log.i("cat",?">>>>>>"?+?builder.toString());

JSONObject?jsonObject?=?new?JSONObject(builder.toString())?
????????????????????????.getJSONObject("userbean");?

????????????????String?Uid;?
????????????????String?Showname;?
????????????????String?Avtar;?
????????????????String?State;?

????????????????Uid?=?jsonObject.getString("Uid");?
????????????????Showname?=?jsonObject.getString("Showname");?
????????????????Avtar?=?jsonObject.getString("Avtar");?
????????????????State?=?jsonObject.getString("State");
带数组形式的:
服务器端返回的数据格式为:

{"calendar":?
????{"calendarlist":?
????????????[?
????????????{"calendar_id":"1705","title":"(\u4eb2\u5b50)ddssd","category_name":"\u9ed8\u8ba4\u5206\u7c7b","showtime":"1288927800","endshowtime":"1288931400","allDay":false},?
????????????{"calendar_id":"1706","title":"(\u65c5\u884c)","category_name":"\u9ed8\u8ba4\u5206\u7c7b","showtime":"1288933200","endshowtime":"1288936800","allDay":false}?
????????????]?
????}?
}

分析代码如下:

//?TODO?状态处理?500?200?
????????????????int?res?=?0;?
????????????????res?=?httpClient.execute(httpPost).getStatusLine().getStatusCode();?
????????????????if?(res?==?200)?{?
????????????????????/*?
?????????????????????*?当返回码为200时,做处理?
?????????????????????*?得到服务器端返回json数据,并做处理?
?????????????????????*?*/?
????????????????????HttpResponse?httpResponse?=?httpClient.execute(httpPost);?
????????????????????StringBuilder?builder?=?new?StringBuilder();?
????????????????????BufferedReader?bufferedReader2?=?new?BufferedReader(?
????????????????????????????new?InputStreamReader(httpResponse.getEntity().getContent()));?
????????????????????String?str2?=?"";?
????????????????????for?(String?s?=?bufferedReader2.readLine();?s?!=?null;?s?=?bufferedReader2?
????????????????????????????.readLine())?{?
????????????????????????builder.append(s);?
????????????????????}?
????????????????????Log.i("cat",?">>>>>>"?+?builder.toString());?
????????????????????/**?
?????????????????????*?这里需要分析服务器回传的json格式数据,?
?????????????????????*/?
????????????????????JSONObject?jsonObject?=?new?JSONObject(builder.toString())?
????????????????????????????.getJSONObject("calendar");?
????????????????????JSONArray?jsonArray?=?jsonObject.getJSONArray("calendarlist");?
????????????????????for(int?i=0;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。

2 JSON-lib

<1>JSON-lib?是一个java类库

? ?* 转换javabeans,maps,collections,java?arrays和XML成为json格式数据?

? ? ?转换json格式数据成为javabeans?对象

? ?* 需要jar包

jakarta?commons-lang?2.5?

jakarta?commons-beanutils?1.8.0?

jakarta?commons-collections?3.2.1?

jakarta?commons-logging?1.1.1?

? ? ? ?????????ezmorph?1.0.6

?注:Google的GSON和JSON-lib的功能基本上是一致的。

json06.html

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Ajax技术与原理的介绍

    Ajax技术与原理的介绍

    2017-06-17 14:00

  • Android开发学习之路-网络编程之xml、json

    Android开发学习之路-网络编程之xml、json

    2017-06-13 13:03

  • JSON学习---ISuperObject接口的简单实用

    JSON学习---ISuperObject接口的简单实用

    2017-06-07 10:19

  • 【JAVAWEB学习笔记】22

    【JAVAWEB学习笔记】22

    2017-06-02 17:04

网友点评