尽管XML拥有跨平台,跨语言的优势,然而,除非应用于 Web Services,否则,在普通的Web应用中,开发者经常为XML的解析伤透了脑筋,无论是服务器端生成或处理XML,还是客户端用JavaScript解析XML,都常常导致复杂的代码,极低的开发效率。
现在,JSON为Web应用开发者提供了另一种数据交换格式。让我们来看看JSON到底是什么,同XML相比,JSON提供了更好的简单性和灵活性。
JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。
JSON数据格式
和XML一样,JSON也是基于纯文本的数据格式。由于JSON天生是为JavaScript准备的,因此,JSON的数据格式非常简单,您可以用JSON传输一个简单的String,Number,Boolean,也可以传输一个数组,或者一个复杂的Object对象。
String的完整表示结构:
Number可以根据整型或浮点数表示如下:
Boolean类型表示为true或false。此外,JavaScript中的null被表示为null,注意,true、false和null都没有双引号,否则将被视为一个String。
JSON对象
Object对象在JSON中是用{}包含一系列无序的Key-Value键值对表示的,实际上此处的Object相当于Java中的Map
{"city":"ChengDu","street":"抚琴西路","postcode":610000}
复杂的JSON对象:
{"name":"XiaoMing","address":
{"city":"ChengDu","street":"抚琴西路","postcode":610000}
}
JSON数组
JSON也可以表示一个数组对象,使用[]包含所有元素,每个元素用逗号分隔,元素可以是任意的Value。
示例:
["abc",12345,false,null]
复杂的JSON数组:
[{"name":"XiaoMing","address":
{"city":"ChengDu","street":"抚琴西路","postcode":610000}
},
{"name":"LaoWang","address":
{"city":"ChengDu","street":"抚琴南路","postcode":610000}
}]
服务器端输出JSON格式数据
以Java为例,将String对象编码为JSON格式:
/**
* 将字符串转换为JSON格式数据
*
* @param src
* 字符串
* @return JSON格式字符串
*/
public String string2Json(String src) {
StringBuilder sb = new StringBuilder(src.length() + 20);
sb.append('\"');
for (int i = 0; i < src.length(); i++) {
char c = src.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();
}
将数组编码为JSON格式:
public String toJson(Object o) {
if (o == null)
return "null";
if (o instanceof String)
return string2Json((String) o);
if (o instanceof Object[])
return array2Json((Object[]) o);
// …………
throw new RuntimeException("Unsupported type: " + o.getClass().getName());
}
public 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();
}
JSON已经是JavaScript标准的一部分。目前,主流的浏览器对JSON支持都非常完善。应用JSON,我们可以从XML的解析中摆脱出来,对那些应用Ajax的Web 2.0网站来说,JSON确实是目前最灵活的轻量级方案。