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);
- }
JSON与XML的比较
◆
可读性
JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出胜负。
◆
可扩展性
XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
◆
编码难度
XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。
◆
解码难度
XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。
◆
实例比较
XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。
现假设有一个用户数据包括:用户名、密码、所在部门、性别、年龄。
用XML表示如下:
<?xml version="1.0" encoding="utf-8"?>
<user>
<name>张三 </name>
<password>123456</password>
<department>技术部</department>
<sex>男</sex>
<old>30</old>
</user>
用JSON表示如下:
{
"name":"张三",
"password":"123456",
"department":"技术部",
"sex":"男",
"old":30
}
与XML一样,JSON也是基于文本的,且它们都使用Unicode编码,同样具有可读性。XML比较适合于标记文档,而JSON却更适合于时行数据交换处理。