本文使用到阿里巴巴的fastjson,相关配置自行百度。
处理数组格式的数据
如图,前端以数组的方式传递node_info过来,后端的处理方法如下:
前提:初始化一些字符集信息,代码如下:
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("application/json; charset=UTF-8"); //建议浏览器解码使用该字符集
resp.setHeader("Access-Control-Allow-Origin", "*");
- 以字符流形式接收数据
BufferedReader bufferedReader = req.getReader();//声明字符输入流
String str = "";
String data = "";
//获取字符输入流
while ((str = bufferedReader.readLine()) != null) {
data = data + str ;
}
System.out.println(data);
此时打印出来的数据形式如下:
可以看到这跟前端的原始JSON数据一模一样,但是类型却不是JSON,而是String
因此需要进行类型转换,把字符集中默认的String类型转换成JSONObject类型
2. 类型转换
代码如下:
JSONObject jsonObject_data = JSONObject.parseObject(data); //把字符输入流转成Json格式
- 截取字段
我们看看截取前后的结果对比:
截取完字段后类型又变回String类型,我们要转成JSONArray类型
代码如下:
JSONArray nodeArray = JSONArray.parseArray(node_info); //String转JSONArray
- 操作数组
JSONArray nodeArray = JSONArray.parseArray(node_info); //String转JSONArray
Object o = nodeArray.toArray()[0];
System.out.println(o);
效果如下:
5. 取数组的字段
处理标准的JSON格式的数据
- 前面的步骤一样,直接贴代码:
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("application/json; charset=UTF-8"); //建议浏览器解码使用该字符集
resp.setHeader("Access-Control-Allow-Origin", "*");
BufferedReader bufferedReader = req.getReader();//声明字符输入流
String str = "";
String data = "";
//获取字符输入流
while ((str = bufferedReader.readLine()) != null) {
data = data + str ;
}
JSONObject jsonObject_data = JSONObject.parseObject(data); //把字符输入流转成Json格式
String node_info = jsonObject_data.getString("node_info");
System.out.println(node_info);
2. 接下来转成JSONObject类型
先说一下JSONObject和JSONArray的区别:
JSONObject是{x,x,x}、而JSONArray是[x,x,x]
上面是处理数组所以转成了JSONArray,而这次我们处理的是对象,所以要转成JSONObject
代码如下:
JSONObject jsonObject_node_info = JSONObject.parseObject(node_info);
- 取JSONObject中的非数组字段,非数组字段如下图:
代码如下:
String uid = jsonObject_node_info.getString("uid");
System.out.println(uid);
4. 取数组字段
String sensor_info = JSONObject.parseObject(jsonObject_node_info.toString()).getString("sensor_info");
JSONArray sensor_array = JSONArray.parseArray(sensor_info); //String转JSONArray
System.out.println(sensor_array);
接下来的处理过程跟上面的处理数组格式数据一模一样,这里不再重复了