zoukankan      html  css  js  c++  java
  • Android数据格式解析对象JSON用法

    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).解析ObjectArray:

    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-8BOM头导致解析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);
  • 相关阅读:
    MongoDB 释放磁盘空间 db.runCommand({repairDatabase: 1 })
    RK 调试笔记
    RK Android7.1 拨号
    RK Android7.1 移植gt9271 TP偏移
    RK Android7.1 定制化 itvbox 盒子Launcher
    RK Android7.1 双屏显示旋转方向
    RK Android7.1 设置 内存条作假
    RK Android7.1 设置 蓝牙 已断开连接
    RK Android7.1 进入Camera2 亮度会增加
    RK 3128 调触摸屏 TP GT9XX
  • 原文地址:https://www.cnblogs.com/makeryan/p/2495642.html
Copyright © 2011-2022 走看看