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



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

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对象"ProgrammerForJSP"转换为JSON字符串。在其他帖子中建议这样做,以避免在自己创建 JSON 字符串时出现任何拼写错误。这是它返回的字符串:

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

SERVLET 代码

.... 
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

此错误是因为 $.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
}

最新更新