首页 > 技术文章 > Java解析json

javaupup 2021-04-09 17:32 原文

项目中经常需要解析前端传来的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。然后提示我不可以相互转换。

推荐阅读