下面我们讨论如何在服务器端输出 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的数据格式非常直观,它支持五种基本类型:字符串(String)、数字(Number)、布尔值(Boolean)...
ASP(Active Server Pages)是一种微软开发的服务器端脚本环境,用于生成动态网页。在本文中,我们将深入探讨如何在ASP中将数据集转换为JSON格式,并处理多重嵌套的JSON数据。JSON(JavaScript Object Notation)是...
标题中的"asp输出json实例"意味着我们将探讨一个ASP脚本,该脚本能够创建并返回JSON格式的数据。这通常是通过在服务器端处理数据,然后以JSON字符串的形式传递给客户端,例如通过AJAX(Asynchronous JavaScript and ...
服务器端返回JSON数据的过程通常涉及以下步骤: 1. **数据准备**:在服务器端,如Java EE应用中,开发者会使用Java对象来存储业务数据。这些对象可能包括自定义的实体类或者Map结构。然后,通过JSON库(如Gson、...
在ASP环境中,我们可能需要将服务器端的数据转换为JSON格式,以便于与客户端进行交互,特别是配合AJAX(Asynchronous JavaScript and XML)技术进行异步数据更新。 标题"asp输出json对象实例"指的是在ASP中创建和...
ASP(Active Server Pages)是一...理解这些概念并能熟练运用,将使你在ASP输出JSON数据时游刃有余。不过,实际的代码实现可能会根据具体需求有所不同,需要结合`Demo1.asp`和`Demo2.asp`中的内容来进一步学习和理解。
josn包,josn工具类(服务器端输出 JSON 格式数据转化)JsonUtil.Java 例如,转化map static String map2Json(Map, Object> map) { if (map.isEmpty()) return "{}"; StringBuilder sb = new StringBuilder...
ASP(Active Server Pages)是一种微软开发的服务器端脚本环境,用于生成动态网页。在本场景中,我们探讨的是如何使用ASP创建一个WebService,该服务能够以JSON(JavaScript Object Notation)格式返回数据,这对于...
在这个“Json数据解析服务器端加客户端代码”中,我们可以预见到包含的是关于如何在服务器端和客户端处理JSON数据的代码示例。 在服务器端,JSON数据通常用于接收来自客户端的请求数据,或者作为响应发送回给客户端...
标题中的“网上小说采集,提供http api 输出json格式数据”表明这是一个使用Go语言开发的项目,其主要功能是网络小说的抓取与整理,并通过HTTP API接口对外提供JSON格式的数据。这样的系统通常用于数据挖掘、内容...
本文将深入探讨如何使用Ajax与Beego实现前后端间的JSON数据交换。 首先,让我们了解基础。`Ajax`(Asynchronous JavaScript and XML)是一种在无需刷新整个页面的情况下,能够更新部分网页的技术。虽然名称中有XML...
本资料“Android客户端与服务器端的json数据交互(服务端客户端)”将深入探讨如何在Android应用中实现这一功能。 一、JSON简介 JSON是一种独立于语言的数据交换格式,它基于ECMAScript的一个子集,易于人阅读和编写...
在**服务器端输出JSON格式数据**,对于Java开发者,可以使用一些库如Jackson或Gson将Java对象转换成JSON字符串。例如,将一个字符串转换为JSON: ```java String str = "Hello"; String jsonStr = String.format("\...
在服务器端处理JSON数据的例子如下: ```java import org.json.JSONObject; public void handleRequest(String jsonData) { JSONObject jsonObject = new JSONObject(jsonData); String name = jsonObject....
下面将详细介绍如何在Lotus Domino BS开发中实现JSON数据的分类输出。 首先,`http://hostname/map/mashuodemo.nsf/vHomedata?ReadViewEntries&outputformat=JSON&Count=1` 这个URL是一个HTTP请求,用于从服务器的...
同时,也会介绍Android端如何发起HTTP请求,获取并解析服务器返回的JSON数据。 #### 二、Android客户端实现 ##### 2.1 权限配置 首先,在AndroidManifest.xml文件中需要添加必要的权限声明,以便允许应用访问网络...
在ASP中输出JSON,主要是为了与JavaScript进行数据交互,因为JSON是JavaScript原生支持的数据格式,可以直接在客户端被解析和操作。以下是一些关于ASP输出JSON的关键知识点: 1. **JSON对象创建**:在ASP中,可以...
在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用和服务器端软件时。本主题聚焦于一个特定的实用工具,即“C# Excel转Json或Js数据格式工具”。这个工具允许用户将Excel电子表格的数据转换为Json...
JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式。它的设计目标是简洁且易于人阅读和...无论是在服务器端生成JSON数据,还是在客户端解析和操作JSON数据,JSON都为开发者提供了强大而方便的工具。