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('\','\\');
其他角色依此类推
我有相同的输入字段,用户可以在其中输入一些数据。接下来我的代码将其转换为 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('\','\\');
其他角色依此类推