原帖:http://www.javaeye.com/topic/71343 作者:wangcheng 时间: 2007-04-16 00:09
JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。 JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。
JSON的规则很简单: 对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。具体细节参考http://www.json.org/json-zh.html
举个简单的例子:
var user =
{
" username " : " andy " ,
" age " : 20 ,
" info " : { " tel " : " 123456 " , " cellphone " : " 98765 " },
" address " :
[
{ " city " : " beijing " , " postcode " : " 222333 " },
{ " city " : " newyork " , " postcode " : " 555666 " }
]
}
alert(user.username); //show: andy
alert(user.age); //show: 20
alert(user.info.cellphone); //show: 98765
alert(user.address[ 0 ].city); //show: beijing
alert(user.address[ 0 ].postcode); //show: 222333
}
这表示一个user对象,拥有username, age, info, address 等属性。
同样也可以用JSON来简单的修改数据,修改上面的例子
var user =
{
" username " : " andy " ,
" age " : 20 ,
" info " : { " tel " : " 123456 " , " cellphone " : " 98765 " },
" address " :
[
{ " city " : " beijing " , " postcode " : " 222333 " },
{ " city " : " newyork " , " postcode " : " 555666 " }
]
}
alert(user.username); //show: andy
alert(user.age); //show: 20
alert(user.info.cellphone); //show: 98765
alert(user.address[ 0 ].city); //show: beijing
alert(user.address[ 0 ].postcode); //show: 222333
user.username = " Tom " ;
alert(user.username); //show: Tom
}
JSON提供了json.js包,下载http://www.json.org/json.js 后,将其引入然后就可以简单的使用object.toJSONString()转换成JSON数据。(注意:如果是2005左右的json.js,方法是不同的,JSON.stringify(object)的)
var carr = new Car( " Dodge " , " Coronet R/T " , 1968 , " yellow " );
alert(carr.toJSONString()); //show: {"make":"Dodge","model":"Coronet R/T","year":1968,"color":"yellow"}
}
function Car(make, model, year, color) {
this .make = make;
this .model = model;
this .year = year;
this .color = color;
}
可以使用eval来转换JSON字符到Object
var str = ' { "name": "Violet", "occupation": "character" } ' ;
var obj = eval( ' ( ' + str + ' ) ' );
alert(obj.toJSONString());
}
或者使用parseJSON()方法
var str = ' { "name": "Violet", "occupation": "character" } ' ;
var obj = str.parseJSON();
alert(obj.toJSONString());
}
下面使用prototype.js写一个JSON的ajax例子。(prototype.js是由Sam Stephenson写的一个javascript类库。这个构思奇妙,而且兼容标准的类库,能帮助你轻松建立有高度互动的web2.0特性的富客户端页面。下载地址:http://www.prototypejs.org/)
先写一个servlet (我的是servlet.ajax.JSONTest1.java)就写一句话
java代码:
再在页面中写一个ajax的请求
var url = " /MyWebApp/JSONTest1 " ;
var mailAjax = new Ajax.Request(
url,
{
method: ' get ' ,
onComplete: jsonResponse
}
);
}
function jsonResponse(originalRequest) {
alert(originalRequest.responseText);
var myobj = originalRequest.responseText.parseJSON();
alert(myobj.name);
}
alert(originalRequest.responseText);
var myobj = originalRequest.responseText.evalJSON( true );
alert(myobj.name);
}
JSON还提供了java的jar包 http://www.json.org/java/index.html API也很简单,下面举个例子
在javascript中填加请求参数
js 代码:
function sendRequest() {
var carr = new Car( " Dodge " , " Coronet R/T " , 1968 , " yellow " );
var pars = " car= " + carr.toJSONString();
var url = " /MyWebApp/JSONTest1 " ;
var mailAjax = new Ajax.Request(
url,
{
method: ' get ' ,
parameters: pars,
onComplete: jsonResponse
}
);
}
使用JSON请求字符串就可以简单的生成JSONObject并进行解析,修改servlet添加JSON的处理(要使用json.jar)
String s3 = request.getParameter( " car " );
try {
JSONObject jsonObj = new JSONObject(s3);
System.out.println(jsonObj.getString( " model " ));
System.out.println(jsonObj.getInt( " year " ));
} catch (JSONException e) {
e.printStackTrace();
}
response.getWriter().print( " { "name": "Violet", "occupation": "character" } " );
}
同样可以使用JSONObject生成JSON字符串,修改servlet
java 代码:
private void doService(HttpServletRequest request, HttpServletResponse response) throws IOException {
String s3 = request.getParameter( " car " );
try {
JSONObject jsonObj = new JSONObject(s3);
System.out.println(jsonObj.getString( " model " ));
System.out.println(jsonObj.getInt( " year " ));
} catch (JSONException e) {
e.printStackTrace();
}
JSONObject resultJSON = new JSONObject();
try {
resultJSON.append( " name " , " Violet " )
.append( " occupation " , " developer " )
.append( " age " , new Integer( 22 ));
System.out.println(resultJSON.toString());
} catch (JSONException e) {
e.printStackTrace();
}
response.getWriter().print(resultJSON.toString());
}
js 代码:
alert(originalRequest.responseText);
var myobj = originalRequest.responseText.evalJSON( true );
alert(myobj.name);
alert(myobj.age);
}
参考
http://www.blogjava.net/Jkallen/archive/2006/03/28/37905.html
http://www.prototypejs.org/learn/json
http://www.json.org/java/index.html
http://www.ibm.com/developerworks/cn/web/wa-ajaxintro10/index.html
要看但没时间看的东西,先记在这里
http://thinhunan.cnblogs.com/archive/2006/04/01/DeveloperNotesForPrototype.html
唉,怎么插入的代码老是到处飞的,浪费好多时间啊