2013-08-16 83 views
2

作为测试场景的一部分,我想使用一些大的JSON对象。我想将它们存储在一个单独的目录中,然后根据需要导入每个对象。Node.js - 使用JSON对象作为变量

目前我使用下面的方法:

var t1 = require('./sample_data/t1.json') 

var t2 = require('./sample_data/t2.json') 

但是我看到过时的数据,即时猜测,由于需要缓存。

我曾尝试导出每个对象,但是我再避开我所需要的JSON,打破我的测试

任何人都可以建议一个包装对象?有一个更好的方法吗?

问候,本。

UPDATE:我的问题是,我看到缓存的结果,因为我捏捏存储JSON

+0

究竟是什么问题? – SLaks

+2

什么是'奇怪的结果'? –

+0

已更新。对不清楚的道歉。 – Ben

回答

4

我不知道,如果它是一个更好的办法,但你也可以做像这样使用文件系统模块是:

fs.readFile('./sample_data/t1.json', function (err, data) { 
    if (err) throw err; 
    t1 = JSON.parse(data); 
}); 

更新:

像Nirk说,有fs.readFile的同步版本。如果您想使用该版本,您的代码应如下所示:

t1 = JSON.parse(fs.readFileSync('./sample_data/t1.json')); 
+0

这是相对于当前目录而不是JS文件。而且,这是异步的。 – SLaks

+1

@SLaks你可以使用'fs.readFileSync' – SheetJS

2

您的怀疑是正确的。

require() caches modules;它只会从磁盘读取每个文件一次。

你可以打破这个缓存是这样的:

delete require.cache[require.resolve('...')]; 

或者,你可以阅读使用fs模块自己的文件,然后调用JSON.parse()
确保正确传递相对或绝对路径(您可能需要拨打require.resolve())。