Javascript 在node.js中使用require()时出现奇怪的JSON解析错误

Javascript 在node.js中使用require()时出现奇怪的JSON解析错误,javascript,node.js,Javascript,Node.js,我有以下JSON: { "request" : { "language" : "en", "title" : "placeholder", "year" : "2014" } } 我正试图使用以下代码对其进行解析: var json = require('../filename); 奇怪的是,我收到了SyntaxError /home/username/code/filename:2 "request" : {

我有以下JSON:

{
   "request" : {
      "language" : "en",
      "title" : "placeholder",
      "year" : "2014"
   }
}
我正试图使用以下代码对其进行解析:

var json = require('../filename);
奇怪的是,我收到了SyntaxError

/home/username/code/filename:2
   "request" : {
             ^
SyntaxError: Unexpected token :
(...)

根据JSONLint,JSON是完全有效的。我遗漏了一些非常明显的东西吗?

听起来像是你制作了一个
.js
文件,而不是
.json
文件。
因此,它被解析为Javascript,而不是JSON。

(编辑)感谢@Aqwis注意到我

为了更好地解析JSON。

require()
不应用于加载JSON文件。它仅用于加载node.js模块,不用于加载数据。实际上,不赞成根据扩展加载数据(参见无数关于require.extensions的讨论)

因此,加载JSON的正确方法如下:


JSON.parse(require('fs').readFileSync('uuu dirname+'/filename','utf8'))

错误做法与否,如果文件扩展名为“JSON”,而不是“JSON”,则在windows上也会发生此故障。我花了一个小时才发现

啊,我没想到。我的文件实际上没有文件扩展名。有没有办法强制require()将文件视为JSON文件?要求我使用.json扩展名似乎与UNIX世界的惯例相反。@Aqwis:文档中只说“
.js
文件被解释为JavaScript文本文件,
.json
文件被解析为json文本文件”@Aqwis,requirejs可以-但它不会-尝试猜测文件的内容,它没有太多其他的东西可以继续。好吧,它有一个事实,文件以一个{(一个.js文件永远不会这样做)开始。但是我猜答案是否定的,那么。@Aqwis:no。
{var foo='42';}
是有效的JavaScript。
{…}
表示一个块。当然,这是非常罕见的,但是文件以
开始的事实{
不足以将其视为JSON。不,require自2011年以来就能够解析JSON。从您链接到的文档中:“
.js
文件被解释为JavaScript文本文件,
.JSON
文件被解析为JSON文本文件”。下次,如果您已经链接到某些文档,请确保事先仔细阅读;)