`
winneryj
  • 浏览: 129645 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

服务器端输出 JSON 格式数据

阅读更多

 

下面我们讨论如何在服务器端输出 JSON 格式的数据。以 Java 为例,我们将演示将一个 Java 对象编码为 JSON 格式的文本。

将 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 '\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();
 }
 

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

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

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

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

要将数组编码为 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();
 }
 

最后,我们需要将 Map<String, Object> 编码为 JSON 格式,因为 JavaScript 的 Object 实际上对应的是 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(',');
    }
    // 将最后的 ',' 变为 '}':
    sb.setCharAt(sb.length()-1, '}');
    return sb.toString();
 }
 

为了统一处理任意的 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());
 }
 

我们并未对 Java 对象作严格的检查。不被支持的对象(例如 List)将直接抛出 RuntimeException 。此外,为了保证输出的 JSON 是有效的,Map<String, Object> 对象的 Key 也不能包含特殊字符。细心的读者可能还会发现循环引用的对象会引发无限递归,例如,精心构造一个循环引用的 Map,就可以检测到 StackOverflowException:

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

好在服务器处理的 JSON 数据最终都应该转化为简单的 JavaScript 对象,因此,递归引用的可能性很小。

最后,通过 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();

分享到:
评论

相关推荐

    JSON客户端与服务器端生成JSON数据及传递方法

    在本文中,我们将深入理解JSON的基本概念,并通过实例了解如何在客户端和服务器端生成和处理JSON数据。 首先,JSON的数据格式非常直观,它支持五种基本类型:字符串(String)、数字(Number)、布尔值(Boolean)...

    asp数据集输出json格式数据,也可以多重嵌套的JSON

    ASP(Active Server Pages)是一种微软开发的服务器端脚本环境,用于生成动态网页。在本文中,我们将深入探讨如何在ASP中将数据集转换为JSON格式,并处理多重嵌套的JSON数据。JSON(JavaScript Object Notation)是...

    asp输出json实例,json.asp

    标题中的"asp输出json实例"意味着我们将探讨一个ASP脚本,该脚本能够创建并返回JSON格式的数据。这通常是通过在服务器端处理数据,然后以JSON字符串的形式传递给客户端,例如通过AJAX(Asynchronous JavaScript and ...

    服务器端返回json数据

    服务器端返回JSON数据的过程通常涉及以下步骤: 1. **数据准备**:在服务器端,如Java EE应用中,开发者会使用Java对象来存储业务数据。这些对象可能包括自定义的实体类或者Map结构。然后,通过JSON库(如Gson、...

    asp输出json对象实例

    在ASP环境中,我们可能需要将服务器端的数据转换为JSON格式,以便于与客户端进行交互,特别是配合AJAX(Asynchronous JavaScript and XML)技术进行异步数据更新。 标题"asp输出json对象实例"指的是在ASP中创建和...

    ASP输出JSON格式数据

    ASP(Active Server Pages)是一...理解这些概念并能熟练运用,将使你在ASP输出JSON数据时游刃有余。不过,实际的代码实现可能会根据具体需求有所不同,需要结合`Demo1.asp`和`Demo2.asp`中的内容来进一步学习和理解。

    josn包,josn工具类

    josn包,josn工具类(服务器端输出 JSON 格式数据转化)JsonUtil.Java 例如,转化map static String map2Json(Map, Object&gt; map) { if (map.isEmpty()) return "{}"; StringBuilder sb = new StringBuilder...

    asp做WebService,输出JSON格式数据

    ASP(Active Server Pages)是一种微软开发的服务器端脚本环境,用于生成动态网页。在本场景中,我们探讨的是如何使用ASP创建一个WebService,该服务能够以JSON(JavaScript Object Notation)格式返回数据,这对于...

    Json数据解析服务器端加客户端代码

    在这个“Json数据解析服务器端加客户端代码”中,我们可以预见到包含的是关于如何在服务器端和客户端处理JSON数据的代码示例。 在服务器端,JSON数据通常用于接收来自客户端的请求数据,或者作为响应发送回给客户端...

    网上小说采集,提供http api 输出json格式数据。.zip

    标题中的“网上小说采集,提供http api 输出json格式数据”表明这是一个使用Go语言开发的项目,其主要功能是网络小说的抓取与整理,并通过HTTP API接口对外提供JSON格式的数据。这样的系统通常用于数据挖掘、内容...

    ajax和beego前后端json格式数据交互实例

    本文将深入探讨如何使用Ajax与Beego实现前后端间的JSON数据交换。 首先,让我们了解基础。`Ajax`(Asynchronous JavaScript and XML)是一种在无需刷新整个页面的情况下,能够更新部分网页的技术。虽然名称中有XML...

    Android客户端与服务器端的json数据交互(服务端客户端).zip

    本资料“Android客户端与服务器端的json数据交互(服务端客户端)”将深入探讨如何在Android应用中实现这一功能。 一、JSON简介 JSON是一种独立于语言的数据交换格式,它基于ECMAScript的一个子集,易于人阅读和编写...

    json初级入门资料

    在**服务器端输出JSON格式数据**,对于Java开发者,可以使用一些库如Jackson或Gson将Java对象转换成JSON字符串。例如,将一个字符串转换为JSON: ```java String str = "Hello"; String jsonStr = String.format("\...

    Ajax中使用JSON传输数据

    在服务器端处理JSON数据的例子如下: ```java import org.json.JSONObject; public void handleRequest(String jsonData) { JSONObject jsonObject = new JSONObject(jsonData); String name = jsonObject....

    lotus domino BS开发 分类输出json

    下面将详细介绍如何在Lotus Domino BS开发中实现JSON数据的分类输出。 首先,`http://hostname/map/mashuodemo.nsf/vHomedata?ReadViewEntries&outputformat=JSON&Count=1` 这个URL是一个HTTP请求,用于从服务器的...

    php与Android用json进行数据交互

    同时,也会介绍Android端如何发起HTTP请求,获取并解析服务器返回的JSON数据。 #### 二、Android客户端实现 ##### 2.1 权限配置 首先,在AndroidManifest.xml文件中需要添加必要的权限声明,以便允许应用访问网络...

    ASP输出JSON

    在ASP中输出JSON,主要是为了与JavaScript进行数据交互,因为JSON是JavaScript原生支持的数据格式,可以直接在客户端被解析和操作。以下是一些关于ASP输出JSON的关键知识点: 1. **JSON对象创建**:在ASP中,可以...

    C# Excel转Json或Js数据格式工具

    在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用和服务器端软件时。本主题聚焦于一个特定的实用工具,即“C# Excel转Json或Js数据格式工具”。这个工具允许用户将Excel电子表格的数据转换为Json...

    JSON入门(纯文本的数据格式)

    JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式。它的设计目标是简洁且易于人阅读和...无论是在服务器端生成JSON数据,还是在客户端解析和操作JSON数据,JSON都为开发者提供了强大而方便的工具。

Global site tag (gtag.js) - Google Analytics