【问题标题】:$.parseJSON giving "Uncaught SyntaxError: Unexpected token"$.parseJSON 给出“Uncaught SyntaxError: Unexpected token”
【发布时间】:2014-12-30 23:28:09
【问题描述】:

我正在使用 JQuery parseJSON 解析一个 json 字符串

var jsontest = '[{"nombre":"Campa\u00f1a de prueba","parcelas":"10","stampCreacion":"2014-12-30 18:18:26","estado":"1","id":"1","active":"1","camposControl":[{"nombre":"Repetici\u00f3n","tipo":"2","id":"2","active":"1"},{"nombre":"Comentarios","tipo":"1","id":"3","active":"1"}]},{"nombre":"Campa\u00f1a2","parcelas":"10","stampCreacion":"2014-12-30 20:07:36","estado":"1","id":"2","active":"1","camposControl":[{"nombre":"Opciones","tipo":"3","id":"16","active":"1","opciones":[{"nombre":"muchas\r","id":"12","active":"1"},{"nombre":"opciones\r","id":"13","active":"1"},{"nombre":"para mi \r","id":"14","active":"1"},{"nombre":"y para ti","id":"15","active":"1"}]},{"nombre":"numerito por aqui","tipo":"2","id":"17","active":"1"}]}]';



var obj = $.parseJSON(jsontest);

根据 jsonlint,它似乎是一个有效的 json,但正如您在小提琴中看到的那样,它给出了下一个错误:

Uncaught SyntaxError: Unexpected token -> jquery-1.11.2.min.js:4

http://jsfiddle.net/6a9qLtq2/

我正在使用 chrome 顺便说一句

【问题讨论】:

    标签: javascript jquery json parsing


    【解决方案1】:

    我看到的错误与您的转义“\”有关。我用 \\uXXXX 替换了你所有的 \uXXXX 代码,我得到的唯一额外错误是你的 '\r'。我也删除了 '\r's 并让它工作:

        var jsontest = '[{"nombre":"Campa\\u00f1a de prueba","parcelas":"10","stampCreacion":"2014-12-30 18:18:26","estado":"1","id":"1","active":"1","camposControl":[{"nombre":"Repetici\\u00f3n","tipo":"2","id":"2","active":"1"},{"nombre":"Comentarios","tipo":"1","id":"3","active":"1"}]},{"nombre":"Campa\\u00f1a2","parcelas":"10","stampCreacion":"2014-12-30 20:07:36","estado":"1","id":"2","active":"1","camposControl":[{"nombre":"Opciones","tipo":"3","id":"16","active":"1","opciones":[{"nombre":"muchas","id":"12","active":"1"},{"nombre":"opciones","id":"13","active":"1"},{"nombre":"para mi ","id":"14","active":"1"},{"nombre":"y para ti","id":"15","active":"1"}]},{"nombre":"numerito por aqui","tipo":"2","id":"17","active":"1"}]}]';
    
    
    var obj = $.parseJSON(jsontest);
    console.log(obj);
    

    我不确定你要使用 '\r' 做什么,但如果你要回车,我想你想要 '\n'。

    作为关于转义的说明,您必须记住字符串中有字符串,因此您必须进行双重转义(这就是您需要两个反斜杠而不是一个的原因)。

    哦,这是一个叉子http://jsfiddle.net/gok31tqu/

    然后为了测试,我做了另一个分叉,我用 '\\r' 替换了你的 '\r',它似乎也可以运行:

    http://jsfiddle.net/9vktyj29/

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      将 JSFiddle 更新为:

      var jsonstringify = JSON.stringify(jsontest);
          var obj = $.parseJSON(jsonstringify);
      

      对反斜杠进行编码

      【讨论】:

      • 现在我得到:未捕获的类型错误:无法使用 'in' 运算符在 [{"nombre":"Campañade ... 我将我的 php 更改为 echo json_encode( $arr, JSON_UNESCAPED_UNICODE); 并解决了这个问题。
      【解决方案3】:
      use eval(jsonData) will fix this issue..
      

      【讨论】:

      • 你能给我语法吗,你实际上用的是什么?
      • 不要eval JSON 字符串。使用实际解析 JSON 的函数(在浏览器或库中)。并且请不要将所有内容都格式化为“代码”,只有实际代码(应该很明显?:))。
      猜你喜欢
      • 1970-01-01
      • 2014-04-07
      • 2015-03-23
      • 2012-05-17
      • 2019-02-10
      • 2014-07-08
      • 2011-03-09
      • 2014-01-06
      • 2012-04-10
      相关资源
      最近更新 更多