语法错误:在angularjs中,Chrome控制台出现意外的令牌N。

15

嗨,我在使用angularjs时通过chrome控制台收到了以下错误:

SyntaxError: Unexpected token N
    at Object.parse (native)
    at fromJson (http://localhost:3000/assets/angular.js?body=1:803:14)
    at $HttpProvider.defaults.defaults.transformResponse    
http://localhost:3000/assets/angular.js?body=1:9471:18)
    at http://localhost:3000/assets/angular.js?body=1:9446:12
    at Array.forEach (native)
    at forEach (http://localhost:3000/assets/angular.js?body=1:149:11)
    at transformData (http://localhost:3000/assets/angular.js?body=1:9445:3)
    at transformResponse (http://localhost:3000/assets/angular.js?body=1:10061:17)
    at wrappedCallback (http://localhost:3000/assets/angular.js?body=1:7510:59)
    at http://localhost:3000/assets/angular.js?body=1:7583:26 angular.js?body=1:6350
(anonymous function) angular.js?body=1:6350
(anonymous function) angular.js?body=1:5421
wrappedCallback angular.js?body=1:7512
(anonymous function) angular.js?body=1:7583
Scope.$eval angular.js?body=1:8927
Scope.$digest angular.js?body=1:8790
Scope.$apply angular.js?body=1:9013
done angular.js?body=1:10266
completeRequest angular.js?body=1:10450
xhr.onreadystatechange

我正在通过Angular进行get()请求,其中json为:

[{"_id":"51f96144c885552bda000015","company_id":"51f82116c88555bf48000004","description":"ENGINEER FOR BEST COMPANY",
"industry_id":null,"location_city":"Pittsburgh","location_coordinates":[-79.9556424,40.4379259],"location_state":"PA","location_zip":"15213","name":"Engineer "},
{"_id":"51f972a5c885552bda000026","company_id":"51f82116c88555bf48000004","description":"has to do everything","industry_id":null,"location_city":"Pittsburgh","location_coordinates":[-79.9418166,40.4443735],"location_state":"PA","location_zip":"15289","name":"job #2"}]

有人知道这是什么意思吗?


1
你是如何生成JSON的?它似乎格式不正确。 - Blender
1
看起来像是 MongoDB 的 JSON。 - ryudice
1
是的,这是我的Rails应用程序的MongoDB JSON。 - Josh David
1
@Blender:你在那个JSON中看到了哪些具体问题?我从别人的API中也得到了完全相同的错误,我需要指导他们如何修复他们的输出...谢谢! - XML
1
@Josh David:如果你找到了解决方案,请分享。请确保将解决方案作为自己问题的答案提供,这样大家就可以投票支持它。 - XML
1
@XMLilley:我不确定,现在似乎是有效的。 - Blender
4个回答

32
任何SyntaxError: Unexpected token意味着您有一些格式错误的JSON,通常是其中一个没有用引号包装的字符串。以下是JSON中支持的数据类型:
  • 字符串(任何用引号括起来的文本)
  • 数组(“ 数组文字”,用 [] 包围)
  • 对象(“ 对象字面量”,用 {} 包围)
  • 布尔值(truefalse,不用引号包裹)
  • 整数或数字(没有用引号包裹)
  • null(不用引号包裹)
具体而言,SyntaxError: Unexpected token N经常是意外在JSON中返回了NaN的结果,尽管它可能只是其他未被包裹的字符串。 NaN不是JSON中支持的值,除了truefalsenull(以及数字)之外,任何其他未被引号包裹的文本都不是。因此,虽然您的JSON示例确实有两个null,但这不应该是问题所在。(错误中的‘N’不是小写字母,就像null一样)。
错误中出现的大写字母“N”使我怀疑您在JSON输出中意外返回了NaN,尽管它在示例中不存在。您样本中唯一的其他大写字母“N”都安全地用引号包装,并且无论如何都在字符串的中间。

关键在于确保在服务器上正确地对输出进行清理,并将任何NaN值替换为零,或加入引号等。或者您可以尝试在客户端处理此类错误,但在数据来源处使用条件逻辑更容易,这样您就不需要使用“脏JSON解析器”。(这有点像在灯还亮着、你知道所有东西在哪里的情况下,在睡觉前清理地板,而不需要在黑暗中探测和避开未知障碍物。)


5
在我的情况下,使用 JSON.parse() 方法时,json字符串中的键(name, age, motto.)没有用双引号装饰。 非正式:
{
    name: "Jhon Brown",
    age: 30,
    motto: "Please, choose good."
}

会产生错误,如:SyntaxError: Unexpected token n at Object.parse (native)

informal:

会出现类似错误:语法错误:在Object.parse(本地)处意外的n令牌

{
    "name": "Jhon Brwon",
    "age": 30,
    "motto": "Please, choose good."
}

1
我遇到了同样的问题,只是N换成了另一个字母。 经过几次测试,我意识到这个字母实际上是我发送的字符串的第一个字母(我以为已转换为JSON)!(在我的情况下,“Hello World”中的H)
问题在于我发送的JSON无效。(JSON只是一个带有关联规范的字符串,使其能够在不同的接口之间被识别) 事实上,我只是发送了一个未序列化(放入正确格式)JSON规范的字符串。我认为你的情况也是如此。
因此,错误来自于你的后端。修复取决于你使用的后端。如果是Java,我可以帮助你!
你可以尝试发送有效的JSON,将发送的数据替换为{"id":1,"name":"test"},这是一个有效的JSON。在这种情况下,您的错误应该会消失,这证明您的JSON序列化不正确。

1
这也可能是以下原因之一:

Notice: Undefined index: project_id in /var/www/html/

由 PHP 生成。


很好的观点。或者更普遍地说,我们可以说它可能是由于任何未捕获的错误直接传输到输出而没有经过消毒处理所引起的。 - XML

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接