json_转转转
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); ??
-
????alert(user.age); ??
-
????alert(user.info.cellphone); ??
-
????alert(user.address[0].city); ??
-
????alert(user.address[0].postcode); ??
-
} ??
这表示一个
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); ??
-
????alert(user.age); ??
-
????alert(user.info.cellphone); ??
-
????alert(user.address[0].city); ??
-
????alert(user.address[0].postcode); ??
-
???? ??
-
????user.username?=?
"Tom"
; ??
-
????alert(user.username); ??
-
} ??
?JSON提供了json.js包,下载http://www.json.org/json.js
后,将其引入然后就可以简单的使用object.toJSONString()转换成JSON数据。
js 代码
-
function
?showCar()?{ ??
-
????
var
?carr?=?
new
?Car(
"Dodge"
,?
"Coronet?R/T"
,?1968,?
"yellow"
); ??
-
????alert(carr.toJSONString()); ??
-
} ??
-
??
-
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
写一个
JSON
的
ajax
例子。
先写一个
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-<st1:chsdate w:st="on"
isrocdate="False" islunardate="False" day="30" month="12"
year="1899">1.5.1</st1:chsdate>.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