Uncaught SyntaxError:带有JSON.parse的意外标记

coi*_*iso 169 javascript jquery json

什么原因导致第三行出现此错误?

var products = [{
  "name": "Pizza",
  "price": "10",
  "quantity": "7"
}, {
  "name": "Cerveja",
  "price": "12",
  "quantity": "5"
}, {
  "name": "Hamburguer",
  "price": "10",
  "quantity": "2"
}, {
  "name": "Fraldas",
  "price": "6",
  "quantity": "2"
}];
console.log(products);
var b = JSON.parse(products); //unexpected token o
Run Code Online (Sandbox Code Playgroud)

打开控制台以查看错误

SLa*_*aks 205

products是一个对象.(从对象文字创建)

JSON.parse()用于将包含JSON表示法的字符串转换为Javascript对象.

您的代码将对象转换为字符串(通过调用.toString()),以尝试将其解析为JSON文本.
默认.toString()返回"[object Object]",这是无效的JSON; 因此错误.

  • @MohammedNoureldin:不; 解决方案是什么也不做,并使用你的对象. (5认同)
  • 数组是对象; 这就是`.toString()`返回的内容(根据规范). (4认同)
  • 如果我使用 Ajax 从远程服务获取数据,这会返回 Json 响应,该怎么办?我希望将该响应保存在 JavaScript 数组对象中? (3认同)

EdH*_*EdH 118

假设你知道它是有效的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 chars
s = s.replace(/[\u0000-\u0019]+/g,""); 
var o = JSON.parse(s);
Run Code Online (Sandbox Code Playgroud)

  • Base64解码后出现尾随特殊字符,你的方法对我帮助很大!谢谢 (2认同)

Onu*_*rım 58

看来你想要对对象进行字符串化.这样做:

JSON.stringify(products);
Run Code Online (Sandbox Code Playgroud)

究其原因,错误是JSON.parse()需要一个String值,products是一个Array.

注:我认为它会尝试json.parse('[object Array]')这会抱怨没想到令牌o[.


Der*_*rin 27

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

在我的情况下,输入字符串来自我的服务器页面[返回页面方法].

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

我也试过JSON.stringify(inputString),但没有帮助.

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

我做了一个替换[与其他一些角色,解析后将新行放回],一切正常.

  • 新线字符也是我的问题.那么我们如何才能恢复这些数据呢? (2认同)

pkt*_*yue 10

products = [{"name":"Pizza","price":"10","quantity":"7"}, {"name":"Cerveja","price":"12","quantity":"5"}, {"name":"Hamburguer","price":"10","quantity":"2"}, {"name":"Fraldas","price":"6","quantity":"2"}];
Run Code Online (Sandbox Code Playgroud)

改成

products = '[{"name":"Pizza","price":"10","quantity":"7"}, {"name":"Cerveja","price":"12","quantity":"5"}, {"name":"Hamburguer","price":"10","quantity":"2"}, {"name":"Fraldas","price":"6","quantity":"2"}]';
Run Code Online (Sandbox Code Playgroud)

  • @SLaks是的,OP可以直接使用产品.但如果他想使用`JSON.parse`,那么args需要是一个字符串. (2认同)
  • 像这样的JSON.parse(products.replace(/'/ g,'“'))` (2认同)

小智 9

JSON.parse正在等待参数中的String.您需要对JSON对象进行字符串化以解决问题.

products = [{"name":"Pizza","price":"10","quantity":"7"}, {"name":"Cerveja","price":"12","quantity":"5"}, {"name":"Hamburguer","price":"10","quantity":"2"}, {"name":"Fraldas","price":"6","quantity":"2"}];
console.log(products);
var b = JSON.parse(JSON.stringify(products));  //solves the problem
Run Code Online (Sandbox Code Playgroud)


小智 7

如果有前导或尾随空格,则无效。尾随/前导空格可以删除为

mystring = mystring.replace(/^\s+|\s+$/g, "");
Run Code Online (Sandbox Code Playgroud)

资料来源:http : //www.toptip.ca/2010/02/javascript-trim-leading-or-trailing.html


hoo*_*ogw 5

您必须在https://jsonformatter.curiousconcept.com/处输入有效的json字符串

有效的json字符串必须带有双引号。

JSON.parse({"u1":1000,"u2":1100})       // will be ok
Run Code Online (Sandbox Code Playgroud)

无报价导致错误

JSON.parse({u1:1000,u2:1100})    
// error Uncaught SyntaxError: Unexpected token u in JSON at position 2
Run Code Online (Sandbox Code Playgroud)

单引号引起错误

JSON.parse({'u1':1000,'u2':1100})    
// error Uncaught SyntaxError: Unexpected token ' in JSON at position 1
Run Code Online (Sandbox Code Playgroud)