JSON(二):服务器端和客户端的JSON处理

    上面介绍了如何用 JSON表示数据,接下来,我们还要解决如何在服务器端生成 JSON 格式的数据以便发送到客户端,以及客户端如何使用 JavaScript 处理 JSON 格式的数据。

    先来看看服务器如何输出JSON格式的数据吧。

    以 Java 为例,我们将演示将一个Java 对象编码为 JSON 格式的文本。将 String 对象编码为 JSON格式时,只需处理好特殊字符即可。另外,必须用 (") 而非 (') 表示字符串:

<span style="font-family:SimHei;font-size:18px;">static Stringstring2Json(String s) { 
    StringBuilder sb = newStringBuilder(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 '\b': 
            sb.append("\\b");
            break; 
        case '\f': 
            sb.append("\\f");
            break; 
        case '\n': 
            sb.append("\\n");
            break; 
        case '\r': 
            sb.append("\\r");
            break; 
        case '\t': 
            sb.append("\\t");
            break; 
        default: 
            sb.append(c); 
        } 
    } 
    sb.append('\"'); 
    return sb.toString(); 
 }</span>

    将 Number 表示为 JSON就容易得多,利用 Java 的多态,我们可以处理 Integer,Long,Float 等多种 Number 格式:

<span style="font-family:SimHei;font-size:18px;">static Stringnumber2Json(Number number) { 
    return number.toString(); 
 }</span>

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

<span style="font-family:SimHei;font-size:18px;"> static Stringboolean2Json(Boolean bool) { 
    return bool.toString(); 
 }</span>

    要将数组编码为 JSON格式,可以通过循环将每一个元素编码出来:

 

<span style="font-family:SimHei;font-size:18px;">static String array2Json(Object[] array) {
    if (array.length==0) 
        return "[]"; 
    StringBuilder sb = newStringBuilder(array.length << 4); 
    sb.append('['); 
    for (Object o : array) { 
        sb.append(toJson(o)); 
        sb.append(','); 
    } 
    // 将最后添加的 ',' 变为 ']': 
    sb.setCharAt(sb.length()-1, ']');
    return sb.toString(); 
 }</span>

    最后,我们需要将 Map<String, Object> 编码为 JSON格式,因为JavaScript Object实际上对应的是 Java  Map<String, Object> 。该方法如下:

<span style="font-family:SimHei;font-size:18px;"> static Stringmap2Json(Map<String, Object> map) { 
    if (map.isEmpty()) 
        return "{}"; 
    StringBuilder sb = newStringBuilder(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(); 
 }</span>

    现在服务器端可以将各种数据类型的数据输出为JSON格式,那么客户端如何接受并显示这些数据呢?接下来我们就看看客户端如何使用JavaScript处理JSON格式的数据吧。假定服务器返回的 JSON 数据是上文的:

{"name":"Michael","address":
   {"city":"Beijing","street":" ChaoyangRoad ","postcode":100025}
}

    我们通过一个简单的 JavaScript方法就能看到客户端如何将 JSON 数据表示给用户:

 

<span style="font-family:SimHei;font-size:18px;">function handleJson() { 
  varj={"name":"Michael","address":
     {"city":"Beijing","street":" ChaoyangRoad ","postcode":100025}
  }; 
  document.write(j.name); 
  document.write(j.address.city); 
 }</span>


    只需将其赋值给一个JavaScript 变量,就可以立刻使用该变量并更新页面中的信息了,相比 XML 需要从 DOM 中读取各种节点而言,JSON的使用非常容易。我们需要做的仅仅是发送一个 Ajax 请求,然后将服务器返回的 JSON 数据赋值给一个变量即可。有许多 Ajax 框架早已包含了处理JSON 数据的能力,例如 Prototype(一个流行的 JavaScript 库:http://prototypejs.org)提供了 evalJSON() 方法,能直接将服务器返回的 JSON文本变成一个JavaScript 变量:

<span style="font-family:SimHei;font-size:18px;">new Ajax.Request("http://url", {
  method: "get", 
  onSuccess: function(transport) {
    var json = transport.responseText.evalJSON();
    // TODO: document.write(json.xxx);
  } 
 });</span>

    如何在服务器端生成 JSON 格式的数据以便发送到客户端,以及客户端如何使用JavaScript 处理 JSON 格式的数据。当然这只是最基本的使用,具体应用到项目实践中还是需要进行多方面的变化的,先学习吧。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值