您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
javase请求并解析后端返回的json数据
发布时间:2017-09-21 17:31:23编辑:雪饮阅读()
所需附件:
后端返回json数据如:
{"msg":1,"data":[{"id":1,"title":"test1"},{"id":2,"title":"test2"}]}
在eclipse项目目录中建立lib文件夹将下载的jar文件fastjson-1.2.38.jar放进该文件夹中。然后执行如下操作:
建立jsonbean包并在该包下建立空的bean模型:
package bean;
import java.util.List;
public class JsonBean {
private int msg;
private List<JsonBean.DataBean> listBean;
public int getMsg() {
return msg;
}
public void setMsg(int msg) {
this.msg = msg;
}
public List<JsonBean.DataBean> getListBean() {
return listBean;
}
public void setListBean(List<JsonBean.DataBean> listBean) {
this.listBean = listBean;
}
public static class DataBean{
private int id;
private String title;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
@Override
public String toString() {
return "JsonBean [msg=" + msg + ", listBean=" + listBean
+ ", getMsg()=" + getMsg() + ", getListBean()=" + getListBean()
+ ", getClass()=" + getClass() + ", hashCode()=" + hashCode()
+ ", toString()=" + super.toString() + "]";
}
}
建立net.sf.json包并建立JSONObject类(用来解析json并填充bean):
package net.sf.json;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSONArray;
import bean.JsonBean;
import bean.JsonBean.DataBean;
public class JSONObject {
public static JsonBean fromObjects(String str){
com.alibaba.fastjson.JSONObject object = com.alibaba.fastjson.JSONObject.parseObject(str);
JsonBean bean = new JsonBean();
bean.setMsg(object.getIntValue("msg"));
JSONArray array = object.getJSONArray("data");
List<JsonBean.DataBean> list = new ArrayList<JsonBean.DataBean>();
for(int i = 0; i < array.size(); i ++){
JsonBean.DataBean bean2 = new DataBean();
com.alibaba.fastjson.JSONObject object2 = com.alibaba.fastjson.JSONObject.parseObject(array.get(i).toString());
bean2.setId(object2.getIntValue("id"));
bean2.setTitle(object2.getString("title"));
list.add(bean2);
}
bean.setListBean(list);
return bean;
}
}
建立ui包,并在包里建立HttpRequestUtil用来获取网络接口:
package ui;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
import bean.JsonBean;
import net.sf.json.JSONObject;
/**
* 发起http请求并获取结果
* @author zyz
* @date 20140522
*
*/
public class HttpRequestUtil {
/**
* 发起http请求并获取结果
*
* @param requestUrl 请求地址
* @param requestMethod 请求方式(GET、POST)
* @param outputStr 提交的数据
* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
*/
public static JsonBean httpRequest(String requestUrl, String requestMethod, String outputStr) {
JsonBean jsonBean = null;
StringBuffer buffer = new StringBuffer();
InputStream inputStream=null;
try {
URL url = new URL(requestUrl);
HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();
httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
// 设置请求方式(GET/POST)
httpUrlConn.setRequestMethod(requestMethod);
if ("GET".equalsIgnoreCase(requestMethod))
httpUrlConn.connect();
// 当有数据需要提交时
if (null != outputStr) {
OutputStream outputStream = httpUrlConn.getOutputStream();
// 注意编码格式,防止中文乱码
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
//将返回的输入流转换成字符串
inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
inputStream = null;
httpUrlConn.disconnect();
jsonBean = JSONObject.fromObjects(buffer.toString());
} catch (ConnectException ce) {
ce.printStackTrace();
System.out.println("连接超时");
} catch (Exception e) {
e.printStackTrace();
System.out.println("http request error:{}");
}finally{
try {
if(inputStream!=null){
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return jsonBean;
}
}
ui包下建立test类做测试:
package ui;
import bean.JsonBean;
import net.sf.json.JSONObject;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
JsonBean jsonData=HttpRequestUtil.httpRequest("http://localhost/", "POST", "");
//访问数组
for(int i=0;i<jsonData.getListBean().size();i++){
System.out.print(jsonData.getListBean().get(i).getTitle()+"\n");
}
//直接访问属性
System.out.println(jsonData.getMsg());
}
}
关键字词:javase,json,请求,解析