为什么这个JSON字符串无效? jQuery.parseJSON函数抛出无效字符

时间:2016-01-18 15:59:43

标签: java jquery json jsp servlets

当尝试将我的Serlvet返回的JSON解析到我的JSP页面时,以下代码行抛出了无效的字符异常:

var obj = jQuery.parseJSON(data);

客户端代码

<script type = "text/javascript">
        function updateProgrammerDetails(site, Id) {

            $.post('EngineAdminServlet',
                    {
                        action: "updateProgrammerMenu",
                        siteDetails: site,
                        ID: Id,
                    }, 
                    function(data, status){
                        var pid, name, sky, ip, eleven;
                        var obj = jQuery.parseJSON(data);

                        .........


                        }   
                    }).fail(function(error) { 
                        alert("Error retrieving details from server");
            }); //end ajax call
        }
</script>

使用GSON生成的JSON字符串

我已经在我的Servlet类中导入了GSON库,以便转换我的Java对象&#39; ProgrammerForJSP&#39;到JSON字符串。这是在其他帖子上推荐的,以避免在我自己创建JSON字符串时出现任何拼写错误。这是它返回的字符串:

{"ID":123,"siteName":"VEGAS","skyl":"WZ0019","ipAddress":"0.0.0.0","code":"L/BEG"}

服务代码

.... 

response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
String gson = new Gson().toJson(myObject);
response.getWriter().write(gson);
} //end of method

我不知道我是否错过了一步或做错了什么?我的想法是IP地址字段可能会丢弃解析器并破坏代码(因此无效字符异常),因为它包含句点字符?我真的不知道。

修改 我使用的是jquery-1.11.3.js

1 个答案:

答案 0 :(得分:0)

错误是因为$.post方法已经检测到JSON响应并将结果解析为对象。然后,您尝试在对象而不是JSON字符串上调用parseJSON,这会导致您看到的错误。您只需删除对$.parseJSON的调用即可。试试这个:

function updateProgrammerDetails(site, Id) {
    $.post('EngineAdminServlet', {
        action: "updateProgrammerMenu",
        siteDetails: site,
        ID: Id,
    }, function(data, status) {
        var pid, name, sky, ip, eleven;
        // work with the object in 'data' here, E.g:
        console.log(data.ID, data.siteName); // = 123, 'VEGAS'
    }).fail(function(error) { 
        alert("Error retrieving details from server");
    }); //end ajax call
}