乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      JSON 入門指南(3)

       WindySky 2009-01-12
      將 Number 表示為 JSON 就容易得多,利用 Java 的多態(tài),我們可以處理 Integer,Long,F(xiàn)loat 等多種 Number 格式:

      static String number2Json(Number number) {
        return number.toString();
      }

        Boolean 類型也可以直接通過 toString() 方法得到 JSON 的表示:

      static String boolean2Json(Boolean bool) {
        return bool.toString();
      }

        要將數(shù)組編碼為 JSON 格式,可以通過循環(huán)將每一個元素編碼出來:

      static String array2Json(Object[] array) {
        if (array.length==0)
          return "[]";
        StringBuilder sb = new StringBuilder(array.length << 4);
        sb.append('[');
        for (Object o : array) {
          sb.append(toJson(o));
          sb.append(',');
        }
        // 將最后添加的 ',' 變?yōu)?']':
        sb.setCharAt(sb.length()-1, ']');
        return sb.toString();
      }

        最后,我們需要將 Map<String, Object> 編碼為 JSON 格式,因為 JavaScript 的 Object 實際上對應(yīng)的是 Java 的 Map<String, Object> 。該方法如下:

      static String map2Json(Map<String, Object> map) {
        if (map.isEmpty())
          return "{}";
        StringBuilder sb = new StringBuilder(map.size() << 4);
        sb.append('{');
        Set<String> keys = map.keySet();
        for (String key : keys) {
          Object value = map.get(key);
          sb.append('"');
          sb.append(key);
          sb.append('"');
          sb.append(':');
          sb.append(toJson(value));
          sb.append(',');
        }
        // 將最后的 ',' 變?yōu)?'}':
        sb.setCharAt(sb.length()-1, '}');
        return sb.toString();
      }
       為了統(tǒng)一處理任意的 Java 對象,我們編寫一個入口方法 toJson(Object),能夠?qū)⑷我獾?Java 對象編碼為 JSON 格式:

      public static String toJson(Object o) {
        if (o==null)
          return "null";
        if (o instanceof String)
          return string2Json((String)o);
        if (o instanceof Boolean)
          return boolean2Json((Boolean)o);
        if (o instanceof Number)
          return number2Json((Number)o);
        if (o instanceof Map)
          return map2Json((Map<String, Object>)o);
        if (o instanceof Object[])
          return array2Json((Object[])o);
        throw new RuntimeException("Unsupported type: " + o.getClass().getName());
      }

        我們并未對 Java 對象作嚴(yán)格的檢查。不被支持的對象(例如 List)將直接拋出 RuntimeException 。此外,為了保證輸出的 JSON 是有效的,Map<String, Object> 對象的 Key 也不能包含特殊字符。細(xì)心的讀者可能還會發(fā)現(xiàn)循環(huán)引用的對象會引發(fā)無限遞歸,例如,精心構(gòu)造一個循環(huán)引用的 Map,就可以檢測到 StackOverflowException:

      @Test(expected=StackOverflowError.class)
      public void testRecurrsiveMap2Json() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("key", map);
        JsonUtil.map2Json(map);
      }

        好在服務(wù)器處理的 JSON 數(shù)據(jù)最終都應(yīng)該轉(zhuǎn)化為簡單的 JavaScript 對象,因此,遞歸引用的可能性很小。

       

        最后,通過 Servlet 或 MVC 框架輸出 JSON 時,需要設(shè)置正確的 MIME 類型(application/json)和字符編碼。假定服務(wù)器使用 UTF-8 編碼,則可以使用以下代碼輸出編碼后的 JSON 文本:

      response.setContentType("application/json;charset=UTF-8");
      response.setCharacterEncoding("UTF-8");
      PrintWriter pw = response.getWriter();
      pw.write(JsonUtil.toJson(obj));
      pw.flush();

        小結(jié)

        JSON 已經(jīng)是 JavaScript 標(biāo)準(zhǔn)的一部分。目前,主流的瀏覽器對 JSON 支持都非常完善。應(yīng)用 JSON,我們可以從 XML 的解析中擺脫出來,對那些應(yīng)用 Ajax 的 Web 2.0 網(wǎng)站來說,JSON 確實是目前最靈活的輕量級方案。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約