您的位置  > 互联网

JSON到底是什么,同XML或HTML片段相比,片段

现在,JSON 为 Web 应用程序开发人员提供了另一种数据交换格式。 让我们看一下什么是 JSON,它比 XML 或 HTML 片段提供了更大的简单性和灵活性。

Ajax 资源中心

访问 Ajax 资源中心,这是有关 Ajax 编程模型信息的一站式中心,包括文档、教程、论坛、博客、wiki 和新闻。 有关 Ajax 的任何新信息都可以在这里找到。

JSON数据格式解析

与 XML 一样,JSON 是一种基于纯文本的数据格式。 由于JSON被设计为只读,因此JSON的数据格式非常简单。 你可以使用JSON来传输一个简单的,,,也可以传输一个数组,或者一个复杂的对象。

、 和 用 JSON 表示非常简单。 例如,用 JSON 表示的简单“ abc ”具有以下格式:

“abc”

除了字符“,,/和一些控制字符(,f,,,)需要编码外,其他字符都可以直接输出。下图是完整的表示结构:

图 1. 完整的表示结构

一个可以表示为整数或浮点数,如下所示:

图 2. 的表示结构

这与大多数编程语言的表示方法是一致的,例如:

12345(整数)

-3.9e10(浮点数)

类型表示为 true 或 false。 另外,null in 表示为null。 注意 true、false 和 null 不能使用双引号,否则将被视为 1。

JSON还可以表示一个数组对象,使用[]包含所有元素,每个元素用逗号分隔,元素可以是任意Value。 例如,以下数组包含 a, 和 null:

[“abc”,12345,假,空]

对象在 JSON 中由包含一系列无序键值对的 {} 表示。 其实这相当于Java中的Map,而不是Java中的Class。 请注意,Key 只能用 表示。

例如,一个对象包含以下Key-Value:

城市:

: 路

: (整数)

用JSON表示如下:

{"城市":"","":"道路","":}

值也可以是另一个对象或数组,因此可以嵌套复杂的表示。 例如,一个包含name和的对象可以表示如下:

{“姓名”:””,””:

{"城市":"","":"道路","":}

处理 JSON 数据

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

我们首先讨论如何处理网页中的JSON数据。 我们可以通过一个简单的方法来看看客户端是如何向用户表示JSON数据的:

() {

var j={"名称":"","":

{"城市":"","":"道路","":}

};

.write(j.name);

.write(j..city);

假设服务器返回的JSON数据如上:

{“姓名”:””,””:

{"城市":"","":"道路","":}

只需将其分配给一个变量,您就可以立即使用该变量并更新页面中的信息。 与需要从 DOM 读取各种节点的 XML 相比,使用 JSON 非常容易。 我们需要做的就是发送一个 Ajax 请求并将服务器返回的 JSON 数据分配给一个变量。 许多 Ajax 框架已经包含处理 JSON 数据的功能。 例如,(一个流行的库:)提供了 () 方法,可以直接将服务器返回的 JSON 文本转换为变量:

新的 Ajax。("", {

: “得到”,

: () {

var json = ..();

// TODO: .write(json.xxx);

});

服务端输出JSON格式数据

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

将对象编码为 JSON 格式时,只需处理特殊字符。 另外,字符串必须用(")表示,而不是('):

复制代码代码如下:

(s) {

sb = 新的 (s.()+20);

sb.('\"');

for (int i=0; ichar c = s.(i);

(C) {

案件 '\”':

sb.("\\\"");

休息;

案件 '\\':

sb.(“\\\\”);

休息;

案件 '/':

sb.("\\/");

休息;

案例“\b”:

sb.("\\b");

休息;

案例“\f”:

sb.("\\f");

休息;

案例“\n”:

sb.("\\n");

休息;

案例“\r”:

sb.("\\r");

休息;

案例“\t”:

sb.("\\t");

休息;

:

某人(c);

sb.('\"');

某人();

将其表示为 JSON 会容易得多。 利用Java的多态性,我们可以处理Long、Float等格式:

复制代码代码如下:

( ) {

.();

类型也可以直接通过 () 方法用 JSON 表示:

复制代码代码如下:

(布尔){

布尔。();

要将数组编码为 JSON 格式,可以在循环中对每个元素进行编码:

复制代码代码如下:

([] 大批) {

if (数组.==0)

“[]”;

sb = new (数组.sb.('[');

for ( o : 数组) {

某人((o));

某人(',');

// 将最后添加的 ',' 更改为 ']':

sb.(sb.()-1, ']');

某人();

最后,我们需要将Map编码为JSON格式,因为它实际上对应于Java的Map。 方法如下:

复制代码代码如下:

(地图地图){

如果(地图。())

“{}”;

sb = new (map.size() sb.('{');

设置键=map.();

对于(键:键){

值=map.get(key);

sb.('\"');

某人(关键);

sb.('\"');

sb.(':');

sb.((值));

某人(',');

// 将最后一个 ',' 更改为 '}':

sb.(sb.()-1, '}');

某人();

为了统一处理任何Java对象,我们编写一个入口方法(),可以将任何Java对象编码为JSON格式:

复制代码代码如下:

(o){

如果(o==null)

“无效的”;

如果(o)

(()o);

如果(o)

(()o);

如果(o)

(()o);

if (o 地图)

((地图)o);

如果(o[])

(([])o);

throw new(" 类型:" + o.().());

我们不对 Java 对象进行严格的检查。 不支持的对象(比如List)会直接抛出。 另外,为了保证输出的JSON有效,Map对象的Key不能包含特殊字符。 细心的读者可能还会发现,循环引用对象会导致无限递归。 例如,通过仔细构建循环引用的 Map,可以检测到:

复制代码代码如下:

@Test(=.class)

无效(){

地图map=new();

map.put("键", 地图);

。(地图);

幸运的是,服务器处理的 JSON 数据最终应该转换为简单的对象,因此递归引用的可能性很小。

最后,通过或MVC框架输出JSON时,需要设置正确的MIME类型(/json)和字符编码。 假设服务器使用UTF-8编码,可以使用以下代码输出编码后的JSON文本:

复制代码代码如下:

.("/json;=UTF-8");

.("UTF-8");

密码 = .();

pw.write(.(obj));

pw.flush();

概括

JSON 已经成为标准的一部分。 目前主流浏览器对JSON的支持非常完善。 使用 JSON,我们可以摆脱 XML 解析。 对于那些使用Ajax的Web 2.0网站来说,JSON确实是目前最灵活、最轻量级的解决方案。