【问题标题】:Why is this JSON String invalid? jQuery.parseJSON function throws invalid character为什么这个 JSON 字符串无效? jQuery.parseJSON 函数抛出无效字符
【发布时间】:2016-01-18 15:59:43
【问题描述】:

当试图解析我的 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"}

服务代码

.... 

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

【问题讨论】:

  • 对不起@rory 这是一个匆忙的帖子,所以我可能没有很好地解释。我已经向我的 servlet 发布了一个 ID 以及来自我的 JSP 页面的一些其他属性,这些属性随后用于在 servlet 上创建一个对象。然后使用 Gson 将该对象解析为 JSON 字符串,以便我可以从该对象获取一些属性,并在它返回时填充我的 JSP 页面上的一些字段。但是,这是发生错误的时候:当我试图解析回 JSP 页面上的一个对象时,它会抛出无效字符异常,所以我不能遍历我的对象以从中获取值......

标签: java jquery json jsp servlets


【解决方案1】:

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

【讨论】:

  • 谢谢@rory。在定义响应内容类型时,我没有意识到该对象已被解析。我在网上看到其他示例使用jQuery.parseJSON(),即使在设置响应类型时也是如此。再次感谢。
  • 没问题,很乐意提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 2021-10-28
  • 2020-01-14
相关资源
最近更新 更多