android 之 json数据解析

来源:互联网 发布:淘宝无线端链接转化器 编辑:程序博客网 时间:2024/06/06 00:29

1.JSON概念:

       一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性,从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 

       JSON可以将Java对象转成json格式的字符串,可以将json字符串转换成Java。比XML更轻量级,Json使用起来比较轻便和简单。JSON数据格式,在Android中被广泛运用于客户端和服务器通信,在网络数据传输与解析时非常方便。

 

2.环境配置

        http://code.google.com/p/google-gson/里有一个名为Gson的类库,可以用它来解析Json数据,并且,Adroid 3.0平台里其实也就是把这一部分直接整合进Android里了。我们要解析Json数据,直接去网站上下载个jar包,导入到工程里,就可以解析Json数据了。

3.JSON应用

   (1).JSON是一种轻量级的数据交换格式
   (2).JSON基于两种数据结构:Object和Array。其中Object是“名称/值”对的集合。

(3)在Android中包含四个与JSON相关的类和一个Exceptions:

        a.JSONObject

        这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。

       b.JSONArray

       它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如:[value1,value2,value3]

        c.JSONStringer

        这个类可以帮助快速和便捷的创建JSONtext。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntaxrules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。例如:

String myString = new JSONStringer().object()   .key("name")  .value("小猪")   .endObject()  .toString(); 

myString ={"name" : "小猪"}

        d.JSONTokener

          这个是系统为JSONObject和JSONArray构造器解析JSON source string的类,它可以从source string中提取数值信息。

        e.JSONException

 

 (4)JSON格式举例

a.Object实例:

 

复制代码
{     "Image": {      "Width":  800,      "Height": 600,      "Title":  "View from 15th Floor",      "Thumbnail": {          "Url":    "http://www.example.com/image/481989943",          "Height": 125,          "Width":  "100"      },      "IDs": [116, 943, 234, 38793]    }}
复制代码

b.Array实例:

 

复制代码
[   {      "precision": "zip",      "Latitude":  37.7668,      "Longitude": -122.3959,      "Address":   "",      "City":      "SAN FRANCISCO",      "State":     "CA",      "Zip":       "94107",      "Country":   "US"   },   {      "precision": "zip",      "Latitude":  37.371991,      "Longitude": -122.026020,      "Address":   "",      "City":      "SUNNYVALE",      "State":     "CA",      "Zip":       "94085",      "Country":   "US"   }]
复制代码

4.JSON解析案例
     (1)解析Object之一:

复制代码
String jsonString ={"url":"http://www.cnblogs.com/qianxudetianxia"};解析方法:JSONObject demoJson = new JSONObject(jsonString);String url = demoJson.getString("url");
复制代码

    (2)解析Object之二:

复制代码
String jsonString ={"name":"android"," version":"Beta1.0"};解析方法:JSONObject demoJson = new JSONObject(jsonString);String name = demoJson.getString("name");String version = demoJson.getString("version");System.out.println("name:"+name+",version:"+version);
复制代码

  (3).解析Array之一:

String jsonString ={"number":[1,2,3]};
 
 解析方法:
 
JSONObject demoJson = new JSONObject(jsonString);
JSONArray numberList = demoJson.getJSONArray("number");
 
for(int i=0; i<numberList.length(); i++){
    //因为数组中的类型为int,所以为getInt,其他getString,getLong同用
    System.out.println(numberList.getInt(i));
}

(4).解析Array之二:

复制代码
String jsonString ={"number":[[1],[2],[3]]};解析方法://嵌套数组遍历JSONObject demoJson = new JSONObject(jsonString);JSONArray numberList = demoJson.getJSONArray("number");for(int i=0; i<numberList.length(); i++){      //获取数组中的数组      System.out.println(numberList.getJSONArray(i).getInt(0));}
复制代码

(5).解析Object和Array:

复制代码
String jsonString ={"mobile":[{"name":"android"},{"name":"iphone"}]};解析方法:JSONObject demoJson = new JSONObject(jsonString);JSONArray numberList = demoJson.getJSONArray("mobile");for(int i=0; i<numberList.length(); i++){      System.out.println(numberList.getJSONObject(i).getString("name"));}
复制代码

(6).使用optType:

上面的例子,使用getType在碰到查找不到节点的时候,会抛出异常。
如果使用optType,找不到节点,则返回null或者默认值。

//无url节点,抛出异常String url = demoJson.getString("url");//无url节点,返回空,如果为基本类型,则返回默认值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主体内容:

 

String jsonString = getJsonString();jsonString =jsonString.substring(jsonString.indexOf("{"),jsonString.lastIndexOf("}")+1);
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝卖韩国化妆品退货怎么办 去韩国留学手机怎么办 韩国办无线网怎么办 淘宝卖家被骗怎么办 淘宝买软件被骗怎么办 被淘宝店诈骗怎么办? 支付宝被骗2000怎么办 给私人打款后不发货怎么办 毕业证寄丢了怎么办 微商下单返现被骗一千四怎么办 淘宝买东西卡里多扣钱怎么办 付款了卖家不发货怎么办 淘宝客服不解决问题怎么办 淘宝未付款订单怎么办 淘宝被限制购买怎么办 苹果官换机维修过怎么办 iphone x官换机坏了怎么办 小娃不要大人睡怎么办? 深度睡眠太少怎么办 踏板摩托车淹缸怎么办 电喷摩托车淹缸怎么办 踏板摩托不过油怎么办 火花塞被汽油淹怎么办 踏板车淹缸了怎么办 电喷汽车淹缸怎么办 踏板摩托车粘缸怎么办 鬼火打不着火怎么办 踏板摩托车没电怎么办 买摩托车被骗了怎么办 鬼火电瓶坏了怎么办 摩托闷油了怎么办 鬼火发不着火怎么办 淘宝买东西发错货了怎么办 咸鱼售假处罚怎么办 趣头条登录不上怎么办 淘宝集运超租怎么办 淘宝发货多发了怎么办 小学生数学学不好怎么办 小学生不爱学英语怎么办 小学生基础知识没学好怎么办 小学生应用题学不明白怎么办