choi2016
小choi
采纳率25%
2017-02-22 15:24

SSM框架下,jsp里解析json数据的问题

已采纳

controller

这里我直接在浏览器运行过,直接会生成JSON数据格式

    @RequestMapping("/api0")
    public String openTestView2(Model model) {
        return "test-api/List1";
    }

    @RequestMapping("/getNCL")
    public void getData(HttpServletResponse response,Ncl searchCondition){
        int totalCount = nclService.getTotalCount(searchCondition);
        List<Ncl> list = nclService.getNclData(searchCondition);
        ObjectMapper map = new ObjectMapper();
        String rst = "";
        try {
            rst = map.writeValueAsString(list);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        StringBuilder sb = new StringBuilder();
        sb.append("{\"Rows\":");
        sb.append(rst);
        sb.append(",\"Total\":");
        sb.append(totalCount + "}");// 追加所有记录数到json
        rst = sb.toString();
        JsonUtil.writeJson(response, rst);// 向页面输出数据

    } 

返回的json

{"Rows":[{"name":null,"year":2014,"mouth":1},{"name":null,"year":2014,"mouth":1}],"Total":28}

jsp

    $(document).ready(function() {  
        $.ajax({  
            //请求方式为get  
            type:"GET",  
            //json文件位置  
            url:"${ctx}/api/getNCL.do",  
            dataType: "text",  
            contentType: "application/json; charset=utf-8",     
            success: function(data){ 
                    //json问题所以要把null弄成"null"
                var datanew = data.replace(/null/g,"\"null\"");
             $("div").append(datanew); 
            }  
        })  
    });  

这样运行是可以在页面上加载出json格式数据的。但是如果调用datanew.rows[n]就不行了,解析不出数据来!

求各位大神帮忙看一下是怎么回事!!!万分感谢!!!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • wojiushiwo945you 毕小宝 4年前

    你错了,JsonUtil.writeJson向页面返回的应该是json格式的数据,而不是字符串;所以ajax接收这里的

        success: function(data){ 
                        //json问题所以要把null弄成"null"
                    var datanew = data.replace(/null/g,"\"null\"");
                   $("div").append(datanew); 
                }  
    

    这里的data就是一个JSON格式的js对象的,不是字符串,所以不能通过你这种方式处理的。你直接处理这个对象,它的Rows属性就是一个数组参考如下:

        success: function(data){ 
                    var datanew = data.Rows;
                                    var result = '';
                                    for(var i=0;i<datanew.length;i++){
                                        var temp = datanew[i];
                                            //处理数据
                                    }
                   $("div").append(datanew); 
                }  
    

    问题就是不能直接按照字符串来处理,返回的值是JSON格式的。

    点赞 评论 复制链接分享
  • choi2016 小choi 4年前

    我的问题的解决方法是,因为我controller里的writeJson直接输出的就是Json,所以只要dataType: "json"就可以了,别的都不用管。
    然后毕小宝大神说的那个也是原因,我一直以为Json是可以打印出来的,所以之前其实已经弄出来了,但是因为没有打印就以为没有Json没有解析成功。
    谢谢大家的帮忙!!!!

            $.ajax({  
                //请求方式为get  
                type:"GET",  
                //json文件位置  
                url:"${ctx}/api/getNCL.do",  
                dataType: "json",
                //请求成功完成后要执行的方法  
                success: function(data){ 
                   var datanew = data.Rows;
                                    var result = '';
                                    for(var i=0;i<datanew.length;i++){
                                        var temp = datanew[i];
                                            //处理数据
                                            result=temp.amount;
                                            alert("result+="+result);
                                    } 
                }  
            })  
    
    点赞 评论 复制链接分享
  • CQguanyuntao 就喜欢你想打又打不着我的样子 4年前

    dataType: "text", 改成 dataType: "json", 返回的数据直接就可以用

    点赞 评论 复制链接分享
  • yushiyoufight 半杯凉月 4年前

    返回的是字符串类型吧,不是json对象,转一下

    点赞 评论 复制链接分享
  • x159357y QingXiaxu 4年前

    你传回来的是Rows
    而不是rows

    点赞 评论 复制链接分享
  • LD0807 海之沐 4年前

    rows和json的名字要对应。大小写要一致哈。

    点赞 评论 复制链接分享

相关推荐