zoukankan      html  css  js  c++  java
  • Json学习

    1.Json简介:

    • Json是JavaScript对象表示法(JavaScript Object Notation)。
    • Json是存储和交换文本信息的数据交换格式,类似于XML,非常适合用于服务器与JavaScript的交互。
    • Json比XML更小,更快,更容易解析。
         例: 这个employees对象是包含2条记录的数组   

    <span style="font-family:Courier New;font-size:18px;color:#3333ff;">{
      “employees”[
          {"firstname":"bill","lastname":"gates"},
          {"firstname":"george","lastname":"bush"}
     ]
    }</span>
    2.Json的语法:

    •     数据书写格式:名称/值 对
    •     大括号保存对象,方括号保存数组
    •     数据统一由都好分隔

    Json对象:{ "firstName":"John" , "lastName":"Doe" }
    Json数组:
    {
     "employees": [
                { "firstName":"John" , "lastName":"Doe" },
                { "firstName":"Anna" , "lastName":"Smith" },
                { "firstName":"Peter" , "lastName":"Jones" }
                  ]
    }

    3.把Json转换为JavaScript对象

          

    var txt=‘
    {
     "employees": [
                { "firstName":"John" , "lastName":"Doe" },
                { "firstName":"Anna" , "lastName":"Smith" },
                { "firstName":"Peter" , "lastName":"Jones" }
                  ]
    }’;
    
    var obj=eval("("+txt+")");
    document.write(obj.employees[0].firstName);

    eval()方法使用的是JavaScript的编译器,可以解析Json文本,然后生成JavaScript对象。

    4.服务器端将数据输出为Json格式

      1.String对象输出为Json格式时,只需要将特殊字符处理好即可。

    static String string2Json(String s) { 
        StringBuilder sb = new StringBuilder(s.length()+20); 
        sb.append('"'); 
        for (int i=0; i<s.length(); i++) { 
            char c = s.charAt(i); //返回字符串中指定索引处的字符
            switch (c) { 
            case '"': 
                sb.append("\""); 
                break; 
            case '\': 
                sb.append("\\"); 
                break; 
            case '/': 
                sb.append("\/"); 
                break; 
            case '': 
                sb.append("\b"); 
                break; 
            case 'f': 
                sb.append("\f"); 
                break; 
            case '
    ': 
                sb.append("\n"); 
                break; 
            case '
    ': 
                sb.append("\r"); 
                break; 
            case '	': 
                sb.append("\t"); 
                break; 
            default: 
                sb.append(c); 
            } 
        } 
        sb.append('"'); 
        return sb.toString(); 
     }

    2.将Number表示为Json:

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

    3.将boolean型也可以通过toString方法得到Json的表示

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

    4.将数组编码为Json时,通过循环,将每一个元素编码出来

    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(','); 
        } 
        // 将最后添加的 ',' 变为 ']': 
        sb.setCharAt(sb.length()-1, ']'); 
        return sb.toString(); 
     }


    5.将 Map<String, Object> 编码为 JSON 格式

    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(','); 
        } 
        // 将最后的 ',' 变为 '}': 
        sb.setCharAt(sb.length()-1, '}'); 
        return sb.toString(); 
     }

    6.为了统一处理任意的 Java 对象,我们编写一个入口方法 toJson(Object),能够将任意的 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()); 
     }

    最后,通过 Servlet 或 MVC 框架输出 JSON 时,需要设置正确的 MIME 类型(application/json)和字符编码。假定服务器使用 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();

    参考出处:http://www.ibm.com/developerworks/cn/web/wa-lo-json/

  • 相关阅读:
    解决maven导入坐标太慢问题
    +=的扩展
    JavaScript
    多线程
    异常
    面向对象
    数组
    java内存
    循环语句和递归
    剑指 Offer 30. 包含min函数的栈
  • 原文地址:https://www.cnblogs.com/elgin-seth/p/5293790.html
Copyright © 2011-2022 走看看