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

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,
        ...
    });
});

这里的问题是上面的代码有时可以工作,有时却不能。 大多数时候,我测试了代码,它工作得很好,但在生产中,我不断收到多次错误报告。

我还没有找出可能的原因。

注意:部分代码没有在上面共享,但只是部分问题。

使用JSON.Parse功能时需要自行处理特殊字符。因此,如果有人在您的 inpTxt 输入中放置了一个 ",它将导致解析该字符串时出错。

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

jsonResult = { data: inp };

我创建了一个 JS fiddle 以使其更易于理解。 https://jsfiddle.net/ub3w0a8x/

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

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

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

有关详细信息,请参阅随附的代码和提供的示例 link here

作为我发现的问题,所以我也在这里陈述一个答案。您所需要的只是在遇到的所有转义字符之前添加一个额外的 \ ,例如:

\b : 退格键

\f:换页

\n : 换行

\r : 马车 return

\t : 水平制表符

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

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

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

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

其他角色依此类推