Ajax - JSON (JavaScript Object Notation)学习

原帖: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

举个简单的例子:

 

js 代码:
function  showJSON() {    

    
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来简单的修改数据,修改上面的例子

js 代码:
function  showJSON() {    
    
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)的)

js 代码
function  showCar() {    
    
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

js 代码:
function  myEval() {    
    
var  str  =   ' { "name": "Violet", "occupation": "character" } ' ;    
    
var  obj  =  eval( ' ( '   +  str  +   ' ) ' );    
    alert(obj.toJSONString());    
}    

或者使用parseJSON()方法

js 代码:
function  myEval() {    
    
var  str  =   ' { "name": "Violet", "occupation": "character" } ' ;    
    
var  obj  =  str.parseJSON();    
    alert(obj.toJSONString());    
}    

 

下面使用prototype.js写一个JSONajax例子。(prototype.js是由Sam Stephenson写的一个javascript类库。这个构思奇妙,而且兼容标准的类库,能帮助你轻松建立有高度互动的web2.0特性的富客户端页面。下载地址:http://www.prototypejs.org/

先写一个servlet (我的是servlet.ajax.JSONTest1.java)就写一句话

java代码:

response.getWriter().print( " " name " " Violet " " occupation " " character "  } " );   

 

再在页面中写一个ajax的请求

js 代码:
function  sendRequest() {    
    
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);    
}    
prototype- 1.5.1 .js 中提供了 JSON 的方法, String.evalJSON(), 可以不使用json.js, 修改上面的方法
js 代码
function  jsonResponse(originalRequest) {    
    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)

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();    
        }    
        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 代码:

function  jsonResponse(originalRequest) {    
    alert(originalRequest.responseText);    
    
var  myobj  =  originalRequest.responseText.evalJSON( true );    
    alert(myobj.name);    
    alert(myobj.age);    
}   

 

参考

http://www.json.org/js.html

http://www.blogjava.net/Jkallen/archive/2006/03/28/37905.html

http://www.json.org/

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

http://591wap.cn/works/prototype/using_ajax_request.html

http://www.prototypejs.org/

唉,怎么插入的代码老是到处飞的,浪费好多时间啊

你可能感兴趣的:(Ajax - JSON (JavaScript Object Notation)学习)