JSON(JavaScript Object Natation)

JSON(JavaScriptObjectNatation)是一种轻量级的数据交换格式,非常适合于服务器于JavaScript的交互。

JSON是基于纯文本的数据格式。可以用JSON传输一个简单的String,Number,Boolean,也可以传输一个数组,或一个复杂的Object。除了字符,\,/和一些控制符(\b,\f,\n,\r,\t)需要编码外,其他Unicode字符可以直接输出。ss

JSON表示一个简单的String:"abc"

JSON表示一个简单的Number:15

JSON表示一个Boolean类型为true和false。此外,JavaScript中null被表示为null。其中,true、false和null都是没有双引号,否则会被视为String。

JSON还可以表示一个数组对象,使用[]包含所有元素,每个元素用逗号分隔,元素可以任意议的Value。["abc",12,false,null]

Object对象在JSON中用{}包含一系列无须的Key-Value键值对表示的,实际上此处的Object相当于Java中的Map<String,Object>,而不是Java中的Class,其中Key只能用String表示,Value也可以是一个Object或数组

{"city":"Beijing","street":"ChaoyangRoad","postcode":100025}

JavaScript处理JSON数据

functionhandleJson(){

varj={"name":"Kitty","address":{"city":"Beijing","street":"chaoyangRoad","postcode":100025}};

document.write(j.name);

document.write(j.address.city);

}

只需将JSON赋给一个JavaScript变量。就可以立刻使用该变量并更新页面中的信息,比XML需要从DOM这个读取各种节点而言,JSON使用容易。只需发送一个Ajax请求,然后将服务器返回的JSON数据赋给一个变量即可。

newAjax.Request("http://url",{

method:"get",

onSuccess:function(transport){

varjson=transport.responseText.evalJSON();

}

});

服务器端输出JSON格式数据

将String对象编码为JSON格式时,只需处理好特殊字符即可。另外,必须使用(")而非(')表示字符串。

staticStringstring2Json(Strings){

StringBuildersb=newStringBuilder(s.length()+20);

sb.append('\"');

for(inti=0;i<s.length();i++){

charc=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);

}

}

}

staticStringnumber2Json(Numbernumber){

returnnumber.toString();

}

staticStringboolean2Json(Booleanbool){

returnbool.toString():

}

staticStringarray2Json(Object[]array){

if(array.length==0)

return"[]";

StringBuildersb=newStringBuilder(array.length<<4);

sb.append('[');

for(Objecto:array){

sb.append(toJson(o));

sb.append(','):

}

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

returnsb.toString();

}

staticStringmap2Json(Map<String,Object>map){

if(map.isEmpty())

retrun"{}";

StringBuildersb=newStringBuilder(map.size()<<4);

sb.append('{');

Set<String>keys=map.keySet();

for(Stringkey:keys){

Objectvalue=map.get(key);

sb.append('\"');

sb.append(key);

sb.append('\"');

sb.append(':');

sb.append(toJson(value));

sb.append(',');

}

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

returnsb.toString();

}

publicstaticStringtoJson(Objecto){

if(o==null)

return"null";

if(oinstanceofString)

returnstring2Json((String)o);

if(oinstanceofBoolean)

returnboolean2Json((Boolean)o);

if(oinstanceofNumber)

returnnumber2Json((Number)o);

if(oinstanceofObject[])

returnarray2Json((Object[])o);

thrownewRuntimeException("Unsupportedtype:"+o.getClass().getName());

}

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

response.setContentType("application/json;charset=UTF-8");

response.setCharacterEncoding("UTF-8");

PrintWriterpe=response.getWriter():

pw.write(JsonUtil.toJson(obj));

pw.flush();

相关推荐