是什么导致了第三行上的错误?

Var product = [{ “名称”:“披萨”, “价格”:“10”, “数量”:“7” },{ “名称”:“Cerveja”, “价格”:“12”, “数量”:“5” },{ “名称”:“汉堡”, “价格”:“10”, “数量”:“2” },{ “名称”:“Fraldas”, “价格”:“6”, “数量”:“2” }); console.log(产品); var b = JSON.parse(products);//意外令牌o

打开控制台以查看错误


当前回答

这是我根据以前的回复做的一个函数:它在我的机器上工作,但YMMV。

/**
   * @description Converts a string response to an array of objects.
   * @param {string} string - The string you want to convert.
   * @returns {array} - an array of objects.
  */
function stringToJson(input) {
  var result = [];

  // Replace leading and trailing [], if present
  input = input.replace(/^\[/, '');
  input = input.replace(/\]$/, '');

  // Change the delimiter to
  input = input.replace(/},{/g, '};;;{');

  // Preserve newlines, etc. - use valid JSON
  //https://stackoverflow.com/questions/14432165/uncaught-syntaxerror-unexpected-token-with-json-parse
  input = input.replace(/\\n/g, "\\n")
               .replace(/\\'/g, "\\'")
               .replace(/\\"/g, '\\"')
               .replace(/\\&/g, "\\&")
               .replace(/\\r/g, "\\r")
               .replace(/\\t/g, "\\t")
               .replace(/\\b/g, "\\b")
               .replace(/\\f/g, "\\f");

  // Remove non-printable and other non-valid JSON characters
  input = input.replace(/[\u0000-\u0019]+/g, "");

  input = input.split(';;;');

  input.forEach(function(element) {
    //console.log(JSON.stringify(element));

    result.push(JSON.parse(element));
  }, this);

  return result;
}

其他回答

假设你知道它是有效的JSON,但你仍然得到这个。

在这种情况下,字符串中很可能存在隐藏/特殊字符,无论您从哪个来源获取它们。当你粘贴到一个验证器时,它们就丢失了——但是在字符串中它们仍然存在。这些字符虽然不可见,但会破坏JSON.parse()。

如果s是你的原始JSON,那么清理它:

// Preserve newlines, etc. - use valid JSON
s = s.replace(/\\n/g, "\\n")
               .replace(/\\'/g, "\\'")
               .replace(/\\"/g, '\\"')
               .replace(/\\&/g, "\\&")
               .replace(/\\r/g, "\\r")
               .replace(/\\t/g, "\\t")
               .replace(/\\b/g, "\\b")
               .replace(/\\f/g, "\\f");
// Remove non-printable and other non-valid JSON characters
s = s.replace(/[\u0000-\u0019]+/g,"");
var o = JSON.parse(s);
[
  {
    "name": "Pizza",
    "price": "10",
    "quantity": "7"
  },
  {
    "name": "Cerveja",
    "price": "12",
    "quantity": "5"
  },
  {
    "name": "Hamburguer",
    "price": "10",
    "quantity": "2"
  },
  {
    "name": "Fraldas",
    "price": "6",
    "quantity": "2"
  }
]

下面是您可以解析的完美JSON内容。

如果有前导空格或尾随空格,则无效。 后面和前面的空格可以被删除为

mystring = mystring.replace(/^\s+|\s+$/g, "");

删除字符串的前导或尾随空格

我发现同样的问题与JSON.parse(inputString)。

在我的例子中,输入字符串来自我的服务器页面(返回一个页面方法)。

我打印了typeof(inputString) -它是字符串,但仍然发生错误。

我还尝试了JSON.stringify(inputString),但它没有帮助。

后来我发现这是一个问题与新的行操作符[\n],在一个字段值。

我做了一个替换(与一些其他字符,把新的行返回解析后),一切都很好。

我所犯的错误是将null(不知情)传递给JSON.parse()。

所以它在JSON的0号位置抛出了意外令牌n。

但是当你在JSON.parse()中传递一些不是JavaScript对象的东西时,就会发生这种情况。