Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON.Parse,';未捕获的语法错误:意外标记o_Javascript_Json - Fatal编程技术网

Javascript JSON.Parse,';未捕获的语法错误:意外标记o

Javascript JSON.Parse,';未捕获的语法错误:意外标记o,javascript,json,Javascript,Json,我在处理从web服务返回的JSON时遇到问题。看起来JSON缺少引号,但是当我向JSON添加引号时,我得到了一个错误。以下是错误消息:“未捕获的SyntaxError:意外的令牌o。将字符串记录到控制台时:[object],[object] 下面是一些模拟错误的示例代码: //Error I am trying to solve var jsonString = '[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]'; var myData

我在处理从web服务返回的JSON时遇到问题。看起来JSON缺少引号,但是当我向JSON添加引号时,我得到了一个错误。以下是错误消息:“未捕获的SyntaxError:意外的令牌o。将字符串记录到控制台时:[object],[object]

下面是一些模拟错误的示例代码:

//Error I am trying to solve
var jsonString = '[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]';
var myData = JSON.parse(jsonString);

$(document).ready(function() {
    var $grouplist = $('#groups');
    $.each(myData, function() {
        $('<li>' + this.Name + '</li>').appendTo($grouplist);
    });
});
//我试图解决的错误
var jsonString='[{“Id”:“10”,“Name”:“Matt”},{“Id”:“1”,“Name”:“Rock”}]';
var myData=JSON.parse(jsonString);
$(文档).ready(函数(){
var$grouplist=$(“#组”);
$.each(myData,function(){
$(“
  • ”+this.Name+“
  • ”).appendTo($grouplist); }); });
    下面是相同的代码,字符串周围有单引号。它起作用了

    //Successful Javascript
    var jsonString = '[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]';
    var myData = JSON.parse(jsonString);
    
    $(document).ready(function() {
        var $grouplist = $('#groups');
        $.each(myData, function() {
            $('<li>' + this.Name + '</li>').appendTo($grouplist);
        });
    });
    
    //Successful HTML
    <ul id="groups"></ul>
    
    //成功的Javascript
    var jsonString='[{“Id”:“10”,“Name”:“Matt”},{“Id”:“1”,“Name”:“Rock”}]';
    var myData=JSON.parse(jsonString);
    $(文档).ready(函数(){
    var$grouplist=$(“#组”);
    $.each(myData,function(){
    $(“
  • ”+this.Name+“
  • ”).appendTo($grouplist); }); }); //成功的HTML
      但是,当我尝试向字符串添加引号时,就像我在实际代码中似乎需要的那样,它失败了:

      //Does not work when I need to append quotes to the string:
      var jsonStringNoQuotes = [{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}];
      jsonStringQuotes = "'" + jsonStringNoQuotes + "'";
      var myData = JSON.parse(jsonStringQuotes);
      
      $(document).ready(function() {
          var $grouplist = $('#groups');
          $.each(myData, function() {
              $('<li>' + this.Name + ',' +  this.Id + '</li>').appendTo($grouplist);
          });
      });
      
      //需要在字符串中添加引号时不起作用:
      var jsonStringNoQuotes=[{“Id”:“10”,“Name”:“Matt”},{“Id”:“1”,“Name”:“Rock”}];
      jsonStringQuotes=“””+jsonStringNoQuotes+“”;
      var myData=JSON.parse(jsonStringQuotes);
      $(文档).ready(函数(){
      var$grouplist=$(“#组”);
      $.each(myData,function(){
      $(“
    • ”+this.Name+,“+this.Id+”
    • ).appendTo($grouplist); }); });
      以下是错误: 控制台的日志字符串:[对象],[对象] data.js:809未捕获的语法错误:意外标记'


      我被难住了。感谢您的帮助!谢谢大家!

      上一个示例是无效的JSON。JSON中不允许使用单引号,字符串内部除外。在第二个示例中,单引号不在字符串中,而是用于显示开始和结束

      有关规格,请参阅

      应该补充:为什么你会这样认为:“就像我在我的真实代码中似乎需要这样做”?也许我们可以帮你想出解决办法

      var jsonStringNoQuotes = [{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}];
      
      它将创建json对象。不需要解析

      jsonStringQuotes = "'" + jsonStringNoQuotes + "'";
      
      将返回“[object]”

      这就是它(下面)导致错误的原因

      var myData = JSON.parse(jsonStringQuotes);
      

      可能来自服务器的内容已经作为JSON对象进行了评估?例如,使用方法:


      但在这种情况下,我不明白为什么不能直接引用
      json
      变量,而不是字符串化和解析。

      如果没有单引号,您将创建一个包含两个对象的数组。这是JavaScript自己的语法。添加引号时,该对象(数组+2个对象)现在是一个字符串。您可以使用
      JSON.parse
      将字符串转换为JavaScript对象。不能使用
      JSON.parse
      将JavaScript对象转换为JavaScript对象

      //String - you can use JSON.parse on it
      var jsonStringNoQuotes = '[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]';
      
      //Already a javascript object - you cannot use JSON.parse on it
      var jsonStringNoQuotes = [{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}];
      
      此外,上一个示例失败,因为您正在向JSON字符串添加文字单引号字符。这是违法的。JSON规范规定只允许双引号。如果要
      console.log

      console.log("'"+[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]+"'");
      //Logs:
      '[object Object],[object Object]'
      
      您将看到它返回数组的字符串表示形式,该数组转换为逗号分隔的列表,每个列表项都是对象的字符串表示形式,即
      [object object]
      。记住,javascript中的关联数组只是对象,每个键/值对都是一个属性/值

      为什么会发生这种情况?因为您是从一个字符串
      “'”
      开始的,所以您试图将数组附加到该字符串,该数组请求它的字符串表示形式,然后您将附加另一个字符串
      “'”

      请不要混淆JSON和Javascript,因为它们是完全不同的东西。JSON是一种人类可读的数据格式,旨在与创建javascript对象时使用的语法相匹配。JSON是一个字符串。Javascript对象不是,因此当在代码中声明时,不会用引号括起来

      看这把小提琴:

      jaon PARSE take string作为参数这些代码片段肯定会产生错误,但我认为您看到的是错误的。您可以发布从服务器检索JSON字符串的代码吗?您的第一个代码示例没有模拟这个问题。你具体问的是哪一个。你的上一个肯定是不正确的。你需要发布一些实际的数据和代码。请在你的文件中添加json2.js并重试。这为我解决了同样的问题。我不认为将数组包装为单引号将为你提供该数组的字符串文字。它会给你类似于
      '[object],[object]'
      的东西,这显然没有解析的意义。使用
      JSON.stringify
      。这就是我要说的。。请再次阅读我的答案,我在“无需解析”中漏掉了“否”(这里是清晨)。您可能应该更正
      '[object]'
      输出,因为这不是这个特定数组的表示方式(很抱歉,太迂腐了,但如果您所写的内容实际上是他们自己可以发现的内容,那么它只会让人们更容易理解您的解决方案)。我已经研究了几个小时相同的问题。谢谢你提供的信息。我很难将单引号添加到JSON字符串中,因为它位于数据属性中。我在做JSON.parse之前先做了一个JSON.stringify解决了这个问题。和这里的人一样,我在那里浪费了一个小时,然后终于找到了这个简单、清晰的解释,谢谢!非常感谢,我也面临着同样的问题。解决了的now@user3754676您的JSON可能无效(例如,缺少双引号)。您可以使用
      //String - you can use JSON.parse on it
      var jsonStringNoQuotes = '[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]';
      
      //Already a javascript object - you cannot use JSON.parse on it
      var jsonStringNoQuotes = [{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}];
      
      console.log("'"+[{"Id":"10","Name":"Matt"},{"Id":"1","Name":"Rock"}]+"'");
      //Logs:
      '[object Object],[object Object]'