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 格式的数据。当然这只是最基本的使用,具体应用到项目实践中还是需要进行多方面的变化的,先学习吧。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 14:04:38

JSON(二):服务器端和客户端的JSON处理的相关文章

Android从服务端获取json解析显示在客户端上面

Android从服务端获取json解析显示在客户端上面 百度经验:jingyan.baidu.com 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据的体积更加小,传输效率高,易解析,不过可读性不高; 因为这次要从服务器端得到Json数据,并且通过解析之后把解析后的数据显示在Android客户端中,首先部署服务器端代码(直接使用Jsp/Servlet): 构造的Json数据如下: [{"name":"张三",&

(二) kendo UI 远程数据组织服务器端与客户端

<script> var sharableDataSource = new kendo.data.DataSource({ transport: { read: { url: "data-service.json", dataType: "json" } }, schema : { data : function(d) { return d.data; //响应到页面的数据 }, total : function(d) { return d.count;

AJAX MVC 服务器返回Json数据,客户端获取Json数据

<> 控制器 Controller using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Script.Serialization; namespace MvcApplication2.Controllers { public class HomeController : Controller { pu

***php解析JSON二维数组字符串

客户端的请求体中的数据:[{"msg_id": 1, "msg_status": "HAS_READ" }, { "msg_id": 2, "msg_status": "HAS_READ" }] 是一个二维数组字符串 $json_data = json_decode($GLOBALS['HTTP_RAW_POST_DATA'], true);其实用这一句即可实现JSON二维数组字符串转P

jquery解析php通过ajax传过来的json二维数组对象

ajax获得php传过来的json二维数组对象,jquery解析 php代码: <?php $news = array( '武汉'=>array(1,2,3), '广州'=>array('rain','shu','fruit'), '北京'=>array('yellow','orange','black'), '上海', '深圳' ); echo json_encode($news); 前台页面 <!DOCTYPE html> <html lang="e

SpringMVC客户端发送json数据时报400错误

当测试客户端发送json数据给服务器时,找不到响应路径? 原来是参数类型不符,即使是json也要考虑参数的个数和类型 解决:将age请求参数由"udf"改为"3"或任意数字即可

Android数据转化为Json形式给客户端及客户端使用json数据

(1)首先创建生成原始数据的service,VideoNewsServiceBean,这是一个接口的实现类,接口的功能如下: public interface VideoNewsService { /** * 获取最新的视频资讯 * @return */ public List<News> getLastNews(); } News类 public class News { private Integer id; private String title; private Integer ti

二维数组转化为json数组

二维数组转化为json数组 -1 var colName = [ ["08020092", "AVX", "1200m", "120", "0.3", "30u"], ["08020098", "KEMET", "1200m", "120", "1.0", "100u"

json解析:[1]gson解析json

客户端与服务器进行数据交互时,常常需要将数据在服务器端将数据转化成字符串并在客户端对json数据进行解析生成对象.但是用jsonObject和jsonArray解析相对麻烦.利用Gson和阿里的fastjson可以很方便的将下面四种常用的数据转换成json字符串,并能够将其解析成原数据对象 类型一:JavaBean 类型二:List<JavaBean> 类型三:List<String> 类型四:List<Map<String,Object>> 将上面的四种数