繁体   English   中英

JSON 解析偶尔会在解析字符串时出错

[英]JSON parse gives error occasionally on parsing string

我有相同的输入字段,用户可以在其中输入一些数据。 接下来,我的代码将其转换为 JSON 并将其发送到服务器。

$("#submit").click(function(){
    var inp = $("#inpTxt").val();

    if(inp == null || inp == ""){
        return;
    }

    jsonResult = JSON.parse('{"data": "' + inp + '"}');

    $.ajax({
        data : jsonResult,
        ...
    });
});

这里的问题是有时上面的代码有效,有时却不起作用。 大多数时候,我测试了代码,它就像一个魅力,但在生产中,我不断收到多次报告的错误。

我还没有弄清楚可能的原因。

注意:代码的某些部分在上面没有共享,而只是问题的一部分。

根据最后一条评论,当有人在输入中输入一些转义字符时,问题似乎发生了(@Noob46 确定了使用“Something”案例的情况,但在我看来,如果任何其他转义字符,如 \\ 或任何其他开头与 \\ 也可能导致同样的问题)。

因此,处理此问题的一种方法是在将传入的输入字符串传递给 JSON.parse 之前对其进行过滤。

为了更进一步,我创建了一些 js,您可以在此处找到它们,如果它们作为输入的一部分出现,实际上可以让您处理转义字符。

有关更多详细信息,请参阅此处提供的链接中的附加代码和示例。

由于我确定的问题,所以让我也在这里陈述一个答案。 您只需要在遇到的所有转义字符之前添加一个额外的 \\ ,例如:

\\b : 退格

\\f : 换页

\\n : 换行

\\r : 回车

\\t : 水平制表符

\\v : 垂直制表符 " : 双引号 \\ : 反斜杠

您可以通过以下代码执行此操作:

inp = inp.replace('"','\\\"');

或者inp.replace('\\','\\\\\\\\');

其他角色依此类推。

当您使用 JSON.Parse 函数时,您需要自己处理特殊字符。 因此,如果有人在您的 inpTxt 输入中放入 " ,则会导致解析该字符串时出错。

您应该执行类似以下代码的操作以避免解析错误并让 javascript 正确处理字符串中的特殊字符。

jsonResult = { data: inp };

我创建了一个 JS 小提琴以使其更容易理解。 https://jsfiddle.net/ub3w0a8x/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM