【问题标题】:JavaScript JSON parse error: single-quotes... where?JavaScript JSON解析错误:单引号......在哪里?
【发布时间】:2014-02-13 04:11:45
【问题描述】:

我使用的是带有 AS3 的上传 php 脚本,现在使用的是 JavaScript。如果没问题,有一个测试功能会返回这个:

{"erro":"OK","msg":"","descr":"op:ini,urlArq:\/Library\/WebServer\/Documents\/www\/sintran\/fotos\/teste.log"}

但 JavaScript 返回错误:JSON 解析错误:JSON 中不允许使用单引号 (')

如您所见,没有单引号。也许“descr”属性将解析引擎与 : 和 混淆了,但不希望更改它,因此 AS3 将不再读取此属性(是有用的数据)。

有什么想法吗?

编辑:斜杠用反斜杠转义,但上面没有显示。

编辑:代码:

formUpload.prototype.ini_test = function(evt){
    console.log("ini_test - Retorno do servidor: "+evt.target.responseText);
    var jsonRes = evt.target.responseText;
    jsonRes = jsonRes.slice(jsonRes.indexOf("{"), jsonRes.lastIndexOf("}")+1);
    try{
        var Res = JSON.parse(jsonRes);
        if(Res.erro!="OK"){
            this.monitor_ini.innerHTML = "Erro: "+Res.msg;
        } else {
            this.monitor_ini.innerHTML = "";
            var jExts = this.form.arquivo_tipos.value;
            this.Exts = JSON.parse(jExts);
            this.monitor_info.innerHTML = this.ajuda();
        }
    } catch(e){
        this.monitor_ini.innerHTML = "Erro!";
        console.log("formUpload ini_test Erro: "+e.message+" Resposta do servidor: "+jsonRes);
        alert("Erro de teste de Upload. Resposta JavaScript: "+e.message);
    }
}

编辑:全部由控制台日志显示 - 但这次我尝试不转义斜杠,因此最终字符串不同:

ini_test - Retorno do servidor: {"erro":"OK","msg":"","descr":"op:ini,urlArq:\/Library\/WebServer\/Documents\/www\/sintran\/fotos\/teste.log"}
formUpload ini_test Erro: JSON Parse error: Single quotes (') are not allowed in JSON Resposta do servidor: {"erro":"OK","msg":"","descr":"op:ini,urlArq:/Library/WebServer/Documents/www/sintran/fotos/teste.log"}

【问题讨论】:

  • JavaScript 代码是什么样的?你确定这个字符串是给JSON.parse的吗,你记录了吗?
  • 已经是 JavaScript 对象了。你为什么要解析它?
  • @Givi:你为什么这么说?是什么让您认为 OP 正在尝试解析 JavaScript 对象。
  • @Givi:不,OP 提供的是一些文本。如何使用该文本的上下文决定了创建了哪种数据。可以是 JSON 数据(特定格式的 Unicode 数据)。它可以在 JavaScript 程序中,用于创建 JavaScript 对象。它可以在 Go 程序中,用于创建地图值。语法和数据不是一回事。不同的技术经常出于不同的目的使用相同的语法。
  • 你确定它不是来自这里吗? this.Exts = JSON.parse(jExts);

标签: javascript json


【解决方案1】:

由于.responseText 是有效的 JSON,错误很可能来自这里:

var jExts = this.form.arquivo_tipos.value;
this.Exts = JSON.parse(jExts);

无论.value 来自表单输入,都不能是有效的 JSON,因此会引发错误。

由于它们在同一个try/catch 中,因此很难分辨是哪一个。如果您需要try/catch,单独的可能会更好。

【讨论】:

  • 我在 console.log 中添加了 jExts,但是我同意在同一个 try/catch 中使用两个操作是一种不好的做法。我会改变这个(稍后),也会尝试实现事件调度以更好地处理错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-10
  • 2015-10-16
  • 2014-04-28
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多