数据格式之解析Json

http://my.oschina.net/jeffzhao/blog/74109


JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习。
     参考文档:http://www.ietf.org/rfc/rfc4627.txt?number=4627

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

?
1

  解析方法:

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

  (2).解析Object之二:

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

  解析方法:

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

     (3).解析Array之一:

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

   解析方法:

?
1
2
3
4
5
6
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之二:

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

  解析方法:

?
1
2
3
4
5
6
7
//嵌套数组遍历
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:

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

  解析方法:

?
1
2
3
4
5
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"  ));
}

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

?
1
2
3
4
//无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主体内容:

?
1
2
String jsonString = getJsonString();
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实例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
{
       "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实例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[
     {
        "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"
     }
]

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值