json格式化高亮
成考报名 发布时间:03-19 阅读:
篇一:《Ajax Hacks-hack7接收JSON格式的数据》
Ajax Hacks-hack7接收JSON格式的数据
怎样才能使用Ajax从服务器接收js对象数据呢?你可以使用一种叫javascript 对象符号的格式接收数据。本hack讲述用户输入信息,从服务器得到JSON格式的响应数据。
JSON很普通而直观,这也许是许多开发者喜欢使用的原因吧。一个例子就是,服务器程序从服务器得到信息,然后以JSON格式返回给web页面。JSON格式的数据描述如下:
左大括号“{”
一个或多个属性名,以冒号隔开的对应的值,以逗号隔开的属性/值对。
右大括号 “}”
每个属性的值可以是:
简单的字符串,例如 “hello”
数组,例如 [1,2,3,4]
数字
true, false, 或 null
其他对象,组合的,或者对象中还有对象。
详细信息请访问:/retype/zoom/1b8f6d35eefdc8d376ee32af?pn=2&x=0&y=0&raww=87&rawh=29&o=jpg_6_0_______&type=pic&aimh=29&md5sum=f0d17720b44ccedb1809c4e00649c6d0&sign=0791482292&zoom=&png=0-254&jpg=0-1383" target="_blank">知识部分:
服务端(生成Json数据):
使用Myeclipse:
1、 新建Web project:
2、 完成后的目录结构:
3、写一个序列化json的类,并继承自HttpServlet,覆写doGet方法 自己写一个最简单的生成jsonObject数据的方法:
/**
* 写json数据出来,类型jsonObject
* */
public String toJson() {
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("studentId", "2012329700030");
jsonObject.put("name", "龙隆蟀舞");
jsonObject.put("sex", "男");
jsonObject.put("password", "55555555");
jsonObject.put("major", "数字媒体与技术");
} catch (JSONException e) {
e.printStackTrace();
}
return jsonObject.toString();
}
然后在doGet方法中返回该数据:
String temp = toJson();
resp.getOutputStream().write(temp.getBytes("utf-8"));
resp.setContentType("text/json;charset=utf-8");
// resp.getWriter().print(temp);//也是输出的一种办法
在doPost方法中调用doGet方法:doGet(req, resp);
3、 然后配置WebRoot目录下的WEB-INF里的web.xml,在web-app节点里输入以下配置信息:
<servlet>
<servlet-name>Json_Serialize</servlet-name>
<servlet-class>com.zstu.practice.Json_Serialize</servlet-class> <!-- class节点就是你类的具体目录 -->
</servlet>
<servlet-mapping>
<servlet-name>Json_Serialize</servlet-name>
<url-pattern>/Json_Serialize</url-pattern>
</servlet-mapping>
4、 然后将该工程部署到服务器上,在浏览器中访问该工程的地址:
成功后可以访问到如下内容:
补充:
刚才写的是一条jsonObject(json对象)数据,
现在来写一条jsonArray(json数组)数据;
应用举例:
jsonObject 可以用于返回查询具体某个学号的单个学生数据
jsonArray 可以用于返回查询具体某个专业的所有学生数据
先改写下原来的toJsonObject方法:
/**
* 写json数据出来,类型jsonObject
* */
public JSONObject toJsonObject() {json格式化高亮。
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("studentId", "2012329700030");
jsonObject.put("name", "龙隆蟀舞");
jsonObject.put("sex", "男");
jsonObject.put("age", "18");
jsonObject.put("major", "数字媒体与技术");
} catch (JSONException e) {
e.printStackTrace();
}
//返回数据
return jsonObject;
}
在写一个生成jsonArray的方法:
/**
* 写json数据出来,类型jsonArray
* */
public String toJsonArray() {
JSONArray jsonArray = new JSONArray();
// 放入一层对象数据
jsonArray.put(toJsonObject());
// 返回数据
return jsonArray.toString();
}
至此,服务端json格式的数据生成讲解完毕。
安卓端(数据请求:得到Josn) 写一个http请求的基类:包括GET和POST两种方式; 首先,最简单的GET方式:
/**
* 得到Json的字符串,通过GET方式
*
* @param url_path
* @return
*/
public static String getJsonGET(String url_path) {
String text = ""; // 定义要返回的字符串
try {
URL url = new URL(url_path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 获取连接
conn.setRequestMethod("GET");// 请求的方式为GET conn.setConnectTimeout(4000);// 设置连接超时
int statusCode = conn.getResponseCode();// 获得状态码 if (statusCode == 200) {
InputStream is = conn.getInputStream();// 输入流 text = getStringFromInputStream(is);// 得到结果 return text;
} else {
text = "timeout";
return text;
}
} catch (Exception e) {
e.printStackTrace();
text = "timeout";
return text;
}
}
然后另一种方式为HttpClient的post:
/**
* 通过HttpClient的方式
*
* @param url
* @return
*/
public static String getJsonPOST(String url) {
HttpClient client = null;// 定义一个客户端
String text = ""; // 定义要返回的字符串
try {
BasicHttpParams httpParams = new BasicHttpParams();// 设置连接超时 HttpConnectionParams.setSoTimeout(httpParams, 8000); // 请求时间 HttpConnectionParams.setConnectionTimeout(httpParams, 8000);// 连接时间
client = new DefaultHttpClient(httpParams);// 实例化一个客户端
HttpPost post = new HttpPost(url);// 定义post方法
HttpResponse response = client.execute(post);// 使用客户端执行post方法,返回给我们一个HttpResponse对象
int statusCode = response.getStatusLine().getStatusCode(); // 获得状态码
if (statusCode == 200) {
// 使用响应对象获得实体, 获得输入流
InputStream is = response.getEntity().getContent();
text = getStringFromInputStream(is);
System.out.println("得到的数据:" + text);
return text;
} else {
System.out.println("连接超时");
text = "timeout";
return text;
}
} catch (Exception e) {
e.printStackTrace();
text = "timeout";
System.out.println("错误");
return text;
} finally {
if (client != null) {
client.getConnectionManager().shutdown(); // 关闭连接和释放资源 }
}
}
然后就可以通过get或者post的方式得到相应url的数据:
// 4.0以上不可再主线程中操作网络,注意。切不可在子线程中更新UI
new Thread() {