当前位置:首页 > 主打产品 >

Java后台解析android端发送的JSON字符串

编辑:北京聚贤贵都宾馆有限公司时间:2017-09-03 12:22:06阅读次数:2
Java后台解析android端发送的JSON字符串 在设备通讯中,往往会用到数据交互。我们这里用的是通过HTTP协议发送JSON数据,android客户端把数据进行打包,发送到后台服务器,后台解析出来。

//android客户端拼装JSON字符串

//如下的拼装结果为:

1

{"data":[{"id":"12345","name":"张三"},{"id":"54321","name":"李四"}]}

JSONObject jsonObject = new JSONObject();

JSONArray jsonArray = new JSONArray();

try {

jsonObject.put("name", "张三");

jsonObject.put("id", "12345");

jsonArray.put(jsonObject);

jsonObject = new JSONObject();

jsonObject.put("name", "李四");

jsonObject.put("id", "54321");

jsonArray.put(jsonObject);

String json = "{\"data\":"+jsonArray.toString()+"}";

Log.v("zd", "json");

result = new HttpUtils().sendJsonData(Consant.ip + Consant.url3, json);

mHandler.sendEmptyMessage(0x0001);

} catch (JSONException e) {

e.printStackTrace();

}

/**

* 向服务器发送数据,编码类型为utf-8

* svrUrl为服务器地址

* ParamStr为JSON字符串

* 发送类型为 POST

*/

public String sendJsonData(String svrUrl, String ParamStr) {

Log.v("zd", "send json");

try {

// 转成指定格式

byte[] requestData = ParamStr.getBytes("UTF-8");

HttpURLConnection conn = null;

DataOutputStream outStream = null;

String MULTIPART_FORM_DATA = "multipart/form-data";

// 构造一个post请求的http头

URL url = new URL(svrUrl); // 服务器地址

conn = (HttpURLConnection) url.openConnection();

conn.setDoInput(true); // 允许输入

conn.setDoOutput(true); // 允许输出

conn.setUseCaches(false); // 不使用caches

conn.setRequestMethod("POST");

conn.setRequestProperty("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3");

conn.setRequestProperty("Connection", "Keep-Alive");

conn.setRequestProperty("Content-Type", MULTIPART_FORM_DATA);

conn.setRequestProperty("Content-Length", Long.toString(requestData.length));

conn.setRequestProperty("data", ParamStr);

// 请求参数内容, 获取输出到网络的连接流对象

outStream = new DataOutputStream(conn.getOutputStream());

outStream.write(requestData, 0, requestData.length);

outStream.flush();

outStream.close();

ByteArrayOutputStream outStream2 = new ByteArrayOutputStream();

int cah = conn.getResponseCode();

if (cah != 200) {

Log.v("data", "服务器响应错误代码:" + cah);

return "0";

}else if(cah == 200){

Log.v("data", "服务器响应成功:" + cah);

}

InputStream inputStream = conn.getInputStream();

int len = 0;

byte[] data = new byte[1024];

while ((len = inputStream.read(data)) != -1) {

outStream2.write(data, 0, len);

}

outStream2.close();

inputStream.close();

String responseStr = new String(outStream2.toByteArray());

Log.v("data", "data = " + responseStr);

return responseStr;

} catch (Exception e) {

return "";

}

}

接下来看一看后台的处理

后台用的是Java利用Tomcat作为服务器

创建的是一个动态的Web项目,通过Servlet的doPost()方法来接收

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

request.setCharacterEncoding("utf-8");

String method = request.getParameter("method").toString();

System.out.println("method = " + method);

System.out.println(new Date().toLocaleString());

String jsonData = getData(request);

try {

jsonStringToList(jsonData);

} catch (Exception e) {

e.printStackTrace();

}

doGet(request, response);

}

public String getData(HttpServletRequest req){

String result = null;

try {

//包装request的输入流

BufferedReader br = new BufferedReader(

new InputStreamReader((ServletInputStream) req.getInputStream(), "utf-8"));

//缓冲字符

StringBuffer sb=new StringBuffer("");

String line;

while((line=br.readLine())!=null){

sb.append(line);

}

br.close();//关闭缓冲流

result=sb.toString();//转换成字符

System.out.println("result = " + result);

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

通过getData()方法获取发送的字符流即JSON字符串

接下来对json字符串进行解析

首先我们来分析一下这个json字符串的特点

{"data":[{"id":"12345","name":"张三"},{"id":"54321","name":"李四"}]}

可以发现它符合这样一个类型{key : value}即JSonObject类型

通过这样的方法把它转为JSONObject

JSONObject jsonObject = JSONObject.fromObject(jsonStr);

在这里会出现两种情况,知道key值和不知道key值。

第一种知道Key我们可以根据key值直接取value

String msg = jsonObject.getString("data").toString();

取出来的结果即为:

[{"id":"12345","name":"张三"},{"id":"54321","name":"李四"}]

第二种在不知道key值的情况取值,用到了迭代器

for (Iterator<?> iter = jsonObject.keys(); iter.hasNext();) {

String key = (String) iter.next();

String value = jsonObject.get(key).toString();

System.out.println(key + "/" + value);

map.put(key, value);

}

这里的key和value

分别对应data、[{"id":"12345","name":"张三"},{"id":"54321","name":"李四"}]

接下来我们再分析一下取出来的value值

不难发现它是一个JSonArray类型

我们用for循环来遍历这个jsonarray

在这里同样有两种情况,知道key值和不知道key值

知道key值直接根据key取即可,不知道则利用迭代器,至于迭代器不做详细介绍

for (int i = 0; i < jsonArray.size(); i++) {

jsonObject = jsonArray.getJSONObject(i);

Map<String, String> map = new HashMap<String, String>();

for (Iterator<?> iter = jsonObject.keys(); iter.hasNext();) {

String key = (String) iter.next();

String value = jsonObject.get(key).toString();

System.out.println(key + "/" + value);

map.put(key, value);

}

//这里是知道key值,直接取数据

//String name = jsonObject.getString("name").toString();

//String id = jsonObject.getString("id").toString();

//

//System.out.println(name + "/" + id);

}

id/12345

name/张三

id/54321

name/李四

PS:我们这里传过来的JSON数据类型为JSonObject,有时也会传过来JSonArray类型

JSONArray jsonArray = JSONArray.fromObject(jsonStr);

只需转换为JsonArray即可。

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站建设公司 https://www.jingchucn.com/zt/wuhan_wangzhanjianshe/

上一篇:网站设置打开新窗口页面与本地窗口页面对SEO有什么影 下一篇:最后一页

相关阅读