项目中经常需要解析前端传来的json
首先导入json的依赖
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.2.3</version>
<classifier>jdk15</classifier><!-- 指定jdk版本 -->
<!--<exclusions>
<exclusion>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</exclusion>
</exclusions>-->
</dependency>
然后用JSONObject.fromObject方法把字符串处理成json
再使用getJSONObject拿到json中的子对象,如果有嵌套就再使用一次
但是如果这个key的数据,是字符串格式的。那么就得先getString然后再fromObject处理成json格式
比如这里的rsource
如果是数组格式,那么用getJSONArray拿到json数组,一个JSONArray对象jsonArray。
再通过for循环jsonArray.size(),用jsonArray.getJSONObject(i)拿到每个json对象
完整代码如下:
public String mysqlquery(HttpServletRequest request){
Responemsg responemsg = new Responemsg(); // 只是个处理返回状态的类
Long rid=Long.parseLong(request.getParameter("id")); // 前端传回来一个id
try{
JSONObject obj = JSONObject.fromObject(reportsMapper.getreportdetail(id));
JSONObject rsource = JSONObject.fromObject(obj.getString("rsource"));
JSONObject rjson = JSONObject.fromObject(rsource.getJSONObject("rjson"));
JSONObject canvasData = JSONObject.fromObject(rjson.getJSONObject("canvasData"));
JSONArray jsonArray = canvasData.getJSONArray("objects");
for (int i=0; i<jsonArray.size(); i++){ // json数组的长度
JSONObject jsonObject = jsonArray.getJSONObject(i);
if (jsonObject.get("label").equals("图表")){
responemsg.setCode("200");
responemsg.setMsg("操作成功");
return new Gson().toJson(responemsg);
}else{
return new Gson().toJson(responemsg);
}
}
}catch (Exception e){
e.printStackTrace();
}
return new Gson().toJson(responemsg);
}
实践过程中,无意间混合使用了谷歌的gson和net.sf.json的json。然后提示我不可以相互转换。
原文:https://www.cnblogs.com/javaupup/p/14638134.html