GWT与JSON(使用JSON格式的数据通讯)
2008-05-23 09:49
447 查看
JSON 是什么?
JSON 的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。JSON与XML具有相同的特性,例如易于人编写和阅读,易于机器生成和解析。但是JSON比XML数据 传输的有效性要高出很多。JSON完全独立与编程语言,使用文本格式保存。
JSON数据有两种结构:
Name-Value 对构成的集合,类似于Java中的Map。
Value的有序列表,类似于Java中的Array。
一个JSON格式的数据示例:
{
"Name": "Apple",
"Expiry": "2007/10/11 13:54",
"Price": 3.99,
"Sizes": [
"Small",
"Medium",
"Large"
]
}
更多关于JSON数据格式的说明参看JSON官方网站:http://www.json.org(中文内容参看:http://www.json.org/json-zh.html)
GWT与JSON
GWT中支持的客户端服务器端方法调用和数据传递的标准格式是RPC。 JSON并不是GWT支持的标准的数据传递格式。那么如何使用JSON来作为GWT的数据传递格式呢?需要以下几步。
第一,引用HTTP和JSON支持。
第二,在客户端创建JSON数据,提交到服务器
第三,在服务器上重写数据格式解析的代码,使之支持JSON格式的数据
第四,在服务器上组织JSON格式的数据,返回给客户端。
第五,客户端解析服务器传回的JSON数据,正确的显示
引用HTTP和JSON支持
找到.gwt.xml文件,在其中的
<inherits name='com.google.gwt.user.User'/>
在之后添加如下的内容:
<inherits name="com.google.gwt.json.JSON"/>
<inherits name="com.google.gwt.http.HTTP"/>
其中com.google.gwt.json.JSON指的是要使用JSON,com.google.gwt.http.HTTP值得是通过HTTP调用服务器上的服务方法。
客户端构造JSON数据
客户端需要使用com.google.gwt.json.client包内的类来组装JSON格式的数据,数据格式如下:
组合一个简单的JSON数据:
JSONObject input = new JSONObject();
JSONString value = new JSONString("mazhao");
input.put("name", value);
JSON数据格式为:{name: "mazhao"}
组合一个包含数组类型的复杂JSON数据:
JSONObject input = new JSONObject();
JSONString value = new JSONString("mazhao");
input.put("name", value);
JSONArray arrayValue = new JSONArray();
arrayValue.set(0, new JSONString("array item 0"));
arrayValue.set(1, new JSONString("array item 1"));
arrayValue.set(2, new JSONString("array item 2"));
input.put("array", arrayValue);
JSON数据格式为:
{name: "mazhao",
array: {"array item 0", "array item 1", "array item 2"}}
注意上述的JSON类型的数据,使用的都是com.google.gwt.json.client包内的类型。这些类型最终会被编译为JavaScript执行。
服务端重写数据解析代码,支持JSON格式的数据
在服务器上,需要使用JSON Java支持类才能将JSON格式的数据转换为各种类型的数据,当然也可以自己写一些解析用的代码。这里我们使用了www.json.org上的代码来完成。这组代码与com.google.gwt.json.client的代码很相似,只是在org.json包内部。
怎么解析JSON术诀呢?针对上述中的复杂的JSON数据:
{name: "mazhao",
array: {"array item 0", "array item 1", "array item 2"}}
可以使用如下的方式解析:
JSONObject jsonObject = new JSONObject(payload);
String name = jsonObject.getString("name");
System.out.println("name is:" + name);
JSONArray jsonArray = jsonObject.getJSONArray("array");
for(int i = 0; i < jsonArray.length(); i++) {
System.out.println("item " + i + " :" + jsonArray.getString(i));
}
其中payload指的是上述的JSON格式的数据。
那么如何写GWT 的Service来得到Payload的数据呢?需要两点,第一,需要建立一个Service类,第二,覆盖父类的processCall方法。
示例代码:
package com.jpleasure.gwt.json.server;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.jpleasure.gwt.json.client.HelloWorldService;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Created by IntelliJ IDEA.
* User: vaio
* Date: 2007-9-4
* Time: 22:08:31
* To change this template use File | Settings | File Templates.
*/
public class HelloWorldServiceImpl extends RemoteServiceServlet implements HelloWorldService {
public String processCall(String payload) throws SerializationException {
try {
JSONObject jsonObject = new JSONObject(payload);
String name = jsonObject.getString("name");
System.out.println("name is:" + name);
JSONArray jsonArray = jsonObject.getJSONArray("array");
for(int i = 0; i < jsonArray.length(); i++) {
System.out.println("item " + i + " :" + jsonArray.getString(i));
}
} catch (JSONException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
return "success";
}
}
在服务器上组织JSON格式的数据,返回给客户端
同上
客户端解析服务器传回的JSON数据,正确的显示
同上
JSON 的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。JSON与XML具有相同的特性,例如易于人编写和阅读,易于机器生成和解析。但是JSON比XML数据 传输的有效性要高出很多。JSON完全独立与编程语言,使用文本格式保存。
JSON数据有两种结构:
Name-Value 对构成的集合,类似于Java中的Map。
Value的有序列表,类似于Java中的Array。
一个JSON格式的数据示例:
{
"Name": "Apple",
"Expiry": "2007/10/11 13:54",
"Price": 3.99,
"Sizes": [
"Small",
"Medium",
"Large"
]
}
更多关于JSON数据格式的说明参看JSON官方网站:http://www.json.org(中文内容参看:http://www.json.org/json-zh.html)
GWT与JSON
GWT中支持的客户端服务器端方法调用和数据传递的标准格式是RPC。 JSON并不是GWT支持的标准的数据传递格式。那么如何使用JSON来作为GWT的数据传递格式呢?需要以下几步。
第一,引用HTTP和JSON支持。
第二,在客户端创建JSON数据,提交到服务器
第三,在服务器上重写数据格式解析的代码,使之支持JSON格式的数据
第四,在服务器上组织JSON格式的数据,返回给客户端。
第五,客户端解析服务器传回的JSON数据,正确的显示
引用HTTP和JSON支持
找到.gwt.xml文件,在其中的
<inherits name='com.google.gwt.user.User'/>
在之后添加如下的内容:
<inherits name="com.google.gwt.json.JSON"/>
<inherits name="com.google.gwt.http.HTTP"/>
其中com.google.gwt.json.JSON指的是要使用JSON,com.google.gwt.http.HTTP值得是通过HTTP调用服务器上的服务方法。
客户端构造JSON数据
客户端需要使用com.google.gwt.json.client包内的类来组装JSON格式的数据,数据格式如下:
数据类型 | 说明 |
JSONArray | JSONValue构成的数组类型 |
JSONBoolean | JSON boolean值 |
JSONException | 访问JSON结构的数据出错的情况下可以抛出此异常 |
JSONNull | JSON Null根式的数据 |
JSONNumber | JSON Number类型的数据 |
JSONObject | JSON Object类型的数据 |
JSONParser | 将String格式的JSON数据解析为JSONValue类型的数据 |
JSONString | JSON String类型的数据 |
JSONValue | 所有JSON类型值的超级类型 |
JSONObject input = new JSONObject();
JSONString value = new JSONString("mazhao");
input.put("name", value);
JSON数据格式为:{name: "mazhao"}
组合一个包含数组类型的复杂JSON数据:
JSONObject input = new JSONObject();
JSONString value = new JSONString("mazhao");
input.put("name", value);
JSONArray arrayValue = new JSONArray();
arrayValue.set(0, new JSONString("array item 0"));
arrayValue.set(1, new JSONString("array item 1"));
arrayValue.set(2, new JSONString("array item 2"));
input.put("array", arrayValue);
JSON数据格式为:
{name: "mazhao",
array: {"array item 0", "array item 1", "array item 2"}}
注意上述的JSON类型的数据,使用的都是com.google.gwt.json.client包内的类型。这些类型最终会被编译为JavaScript执行。
服务端重写数据解析代码,支持JSON格式的数据
在服务器上,需要使用JSON Java支持类才能将JSON格式的数据转换为各种类型的数据,当然也可以自己写一些解析用的代码。这里我们使用了www.json.org上的代码来完成。这组代码与com.google.gwt.json.client的代码很相似,只是在org.json包内部。
怎么解析JSON术诀呢?针对上述中的复杂的JSON数据:
{name: "mazhao",
array: {"array item 0", "array item 1", "array item 2"}}
可以使用如下的方式解析:
JSONObject jsonObject = new JSONObject(payload);
String name = jsonObject.getString("name");
System.out.println("name is:" + name);
JSONArray jsonArray = jsonObject.getJSONArray("array");
for(int i = 0; i < jsonArray.length(); i++) {
System.out.println("item " + i + " :" + jsonArray.getString(i));
}
其中payload指的是上述的JSON格式的数据。
那么如何写GWT 的Service来得到Payload的数据呢?需要两点,第一,需要建立一个Service类,第二,覆盖父类的processCall方法。
示例代码:
package com.jpleasure.gwt.json.server;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.jpleasure.gwt.json.client.HelloWorldService;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Created by IntelliJ IDEA.
* User: vaio
* Date: 2007-9-4
* Time: 22:08:31
* To change this template use File | Settings | File Templates.
*/
public class HelloWorldServiceImpl extends RemoteServiceServlet implements HelloWorldService {
public String processCall(String payload) throws SerializationException {
try {
JSONObject jsonObject = new JSONObject(payload);
String name = jsonObject.getString("name");
System.out.println("name is:" + name);
JSONArray jsonArray = jsonObject.getJSONArray("array");
for(int i = 0; i < jsonArray.length(); i++) {
System.out.println("item " + i + " :" + jsonArray.getString(i));
}
} catch (JSONException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
return "success";
}
}
在服务器上组织JSON格式的数据,返回给客户端
同上
客户端解析服务器传回的JSON数据,正确的显示
同上
相关文章推荐
- GWT入门介绍(使用JSON格式的数据通讯)
- GWT与JSON(使用JSON格式的数据通讯)
- GWT入门介绍(使用JSON格式的数据通讯)
- jQuery中使用Ajax获取JSON格式数据
- 使用getJSON()方法异步加载JSON格式数据
- 使用json格式在localstorage中保存数据
- 【Android开发经验】Json数据格式介绍、使用Android自带类库完成Json生成与解析
- 如何使用fastJson来解析JSON格式数据和生成JSON格式数据
- 获取网络Json格式数据-使用原生态解析Json
- 使用Joson的格式字符串在Socket中通讯时数据格式的转换
- 使用jquery和html5 post json格式数据
- 如何使用JSON格式 POST数据到服务器
- 使用 C++ 处理 JSON 数据交换格式
- SSH三大框架集成中,使用jQuery框架 Ajax技术返回json格式的数据(二)
- Android JSON数据格式的解析,与简单对象、带泛型的List和Map的转换,以及GSON的使用
- C++使用Json作为数据包装格式的通信
- 使用JDBC获取数据库数据,并生成json格式文件(省市区三级联动)
- C++使用JsonCpp库操作json格式数据示例
- 在.NET使用JSON作为数据交换格式(转http://blog.csdn.net/zhoufoxcn/article/details/6254657)
- 在.NET使用JSON作为数据交换格式