zoukankan      html  css  js  c++  java
  • 12.3 JSON

        JSON表示JavaScript Object Notation(JavaScript对象符号)。虽然其最初旨在用于JavaScript,但是作为一种数据交换格式,它是语言无关的。另外,由于种种原因(其中之一就是其相对容易实现),许多Web服务都将它作为基于XML传输数据的其他格式的替代物。他比XML更加轻量级、更紧凑,并且更易于进行机器分析。

        Android在org.json程序包中绑定了一个JSON分析器。

        虽然介绍JSON数据的精确语法将会偏离本书的主题,但是下面将介绍JSON对象的一个原型化表示。

        {“result”:{"aname":"Value","anumber":1234,"aboolean":false}}

        在JSON表示中可以看到,整个表示由括号包围:“{”和“}”。对象的名称是第一个字符串,其位于引号中,随后是一个冒号,即“result”:。下一组括号表示作为对象一部分的所有数据。每段数据都已相似的方式标识,其中名称在引号中,后跟一个冒号,然后是实际的数据。字符串采用引号来注明;没有引号的数字只是一个数字;布尔值用true或false来表示;最后,数据数组将是一系列置于方括号“[”和“]”内的对象,对象之间以逗号分隔。

       下面是一个称为anarray的数组。

       {“anarray”:[{"arrayelement":"Array Element 1"},{"arrayelement":"Array Element 2"}]}

        这个数组有两个元素,每个元素是一个对象,其以“{”和“}”围绕,并且对象之间以逗号分隔,每个对象都包含称为“arrayelement”的字符串。

        接下来看看如何使用Android内置的JSON分析器来分析JSON数据。

        首先将使用下面这个简单的JSON数据:

        {“result”:{"aname":"Value","anumber":1234,"aboolean":false},“anarray”:[{"arrayelement":"Array Element 1"},{"arrayelement":"Array Element 2"}]}

        为了使用JSON分析器,该数据必须位于一个字符串中。为此,必须对双引号进行转义。

    1         String JSONData=""+"{"results":{"aname":"value","anumber":1234,"aboolean":false, "+""anarray":[{"arrayelement":"Array Element 1"},{"arrayelement":"Array Element 2"}]}}";

         在Android可用的JSON程序包中包含一个JSONObject类,可以通过传入JSON格式的数据(如在JSONData字符串中存在的数据)来构造它。

    1             JSONObject overallJSONObject=new JSONObject(JSONData);

        一旦获得JSONObject,就可以提出任何JSON对象、JSON数组或者它可能包含的常规字段。由于结果是JSON对象,而且其正好位于外部对象的内部,因此可以通过使用getJSONObject方法并传入正试图提取的对象名称来获得它的引用。

    1             JSONObject resultsObject=overallJSONObject.getJSONObject("results");

        一旦获得了该JSONObject对象,就能提取它所包含的任何数据。对每种数组类型都有不同的提取方法。

        为了提取一个字符串,可以使用getString方法,同时传入在JSON数据中指定的名称。

    1             String aname=resultsObject.getString("aname");

        为了提取一个整数,可以使用getInt方法,同时传入在JSON数据中指定的名称。相应的,可以使用getDouble方法将JSON数据作为双精度数提取出来;或者通过使用getLong方法将它作为长整数提取出来。

    1             int anumber=resultsObject.getInt("anumber");

        为了提取一个布尔值,可以使用getBoolean方法,同时传入在JSON数据中指定的名称。

    1             boolean aboolean=resultsObject.getBoolean("aboolean");

        以上示例数据在resultsObject中还有一个JSON对象数组,称为anarray。可以使用getJSONArray方法并传入数组的名称来得到该数组的一个引用。

    1             JSONArray anarray=resultsObject.getJSONArray("anarray");

        可以通过使用JSONArray上的getJSONObject方法并传入元素的索引号来遍历JSONArray对象,提取出其中单个的JSON对象元素。

    1             for(int i=0;i<anarray.length();i++){
    2                 JSONObject arrayElementObject=anarray.getJSONObject(i);
    3                 String arrayelement=arrayElementObject.getString("arrayelement");
    4             }

        下面是将上述所有内容汇总在一起的完整示例。

     1 package com.nthm.androidtestActivity;
     2 
     3 import org.json.JSONArray;
     4 import org.json.JSONException;
     5 import org.json.JSONObject;
     6 import android.app.Activity;
     7 import android.os.Bundle;
     8 
     9 public class SimpleJSON extends Activity {
    10 
    11     @Override
    12     protected void onCreate(Bundle savedInstanceState) {
    13         super.onCreate(savedInstanceState);
    14         String JSONData=""+"{"results":{"aname":"value","anumber":1234,"aboolean":false, "+""anarray":[{"arrayelement":"Array Element 1"},{"arrayelement":"Array Element 2"}]}}";

        需要在try/catch块中包装许多JSONObject与JSONArray方法,因为他们中的许多方法都会抛出异常,其中包括JSONObject与JSONArray的构造函数。

     1         try{
     2             JSONObject overallJSONObject=new JSONObject(JSONData);
     3             JSONObject resultsObject=overallJSONObject.getJSONObject("results");
     4             String aname=resultsObject.getString("aname");
     5             int anumber=resultsObject.getInt("anumber");
     6             boolean aboolean=resultsObject.getBoolean("aboolean");
     7             JSONArray anarray=resultsObject.getJSONArray("anarray");
     8             for(int i=0;i<anarray.length();i++){
     9                 JSONObject arrayElementObject=anarray.getJSONObject(i);
    10                 String arrayelement=arrayElementObject.getString("arrayelement");
    11             }
    12         }catch(JSONException e){

        大多数捕获的异常是JSONException示例,其表明在分析时发生了错误。在这里仅仅是输出栈跟踪。在你的应用程序中,你可能会想做某些更灵活的处理,如向用户显示错误消息或试图去掉生成错误的步骤以继续分析。

    1             e.printStackTrace();
    2         }
    3     }
    4 }

        如前所示,分析JSON数据的基础非常简单。接下来将在一个实际的示例中探讨如何将针对JSON数据的HTTP请求汇总在一起。

  • 相关阅读:
    下载commons-fileupload-1.2.1.jar和commons-io-2.0.jar驱动包
    Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The server may
    jQury 入门 2 包装集
    JQuery 入门 1 ---定位
    JDBC连接mysql
    JSTL 的引入 JSTL包的下载
    mysql 的具体应用
    mysql 绿色版本的应用
    kong网关: service+route+upstream
    kong网关命令(一)
  • 原文地址:https://www.cnblogs.com/ZSS-Android/p/3962817.html
Copyright © 2011-2022 走看看