【问题标题】:JSON parse gives error occasionally on parsing stringJSON解析偶尔会在解析字符串时出错
【发布时间】:2019-11-25 10:48:17
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • 无论如何,你的所作所为似乎有点毫无意义.. 就做jsonResult = {data: inp}
  • 不,你不需要那样做。 inp 是一个字符串。
  • 一个简单的输入,即inp='something"something' 可能会破坏代码,我会第二个@Keith
  • @Noob46 似乎这个错误是由于没有正确处理转义字符尝试输入“Hello”或\Hello,看看你是否收到错误。
  • 我只能重申,在这里使用JSON.parse 是完全没有必要且容易出错的。 jsonResult = {data: inp} 为您提供完全相同的结果而没有问题。如果您认为必须使用JSON.parse,请解释您为什么这么认为?这将帮助我们解决您的疑虑。

标签: javascript jquery json escaping


【解决方案1】:

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

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

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

更多详情请参考所提供链接here中的附加代码和示例。

【讨论】:

    【解决方案2】:

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

    \b : 退格

    \f : 换页

    \n : 换行

    \r : 回车

    \t : 水平制表符

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

    你可以通过如下代码来做到这一点:

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

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

    其他角色依此类推。

    【讨论】:

      【解决方案3】:

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

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

      jsonResult = { data: inp };
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 1970-01-01
        • 1970-01-01
        • 2013-05-10
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        相关资源
        最近更新 更多