我有一堆JSON文件,我需要解析(在节点),但许多文件有这样的东西:
"_id" : NumberLong(528000021)
其中NumberLong
是JSON文件作用域之外的函数。当我运行JSON时。我得到一个错误(可以理解),它发现了一个意外的令牌。是否有一种方法来创建一个函数NumberLong并将其注入解析的作用域?
——编辑——
在这个问题上给了@Svabael因果报应的答案,但对于好奇的人来说,这里是我如何解决这个问题的。我为出现在"JSON"中的任何函数创建了GLOBAL函数,然后创建了一个模块,然后需要它。
#!/usr/bin/env node
var fs = require('fs');
GLOBAL.ISODate = function(x){return x};
GLOBAL.NumberLong = function(x){return x};
var source = "./JSONFiles/";
var target = "./JSONModules/";
for(var i=2;i<process.argv.length;i++) {
var fn = process.argv[i];
var sn = source + fn;
var sd = fs.readFileSync(sn,'utf8');
var tn = target + fn.replace('.json','.js');
var td = "module.exports = " + sd;
fs.writeFileSync(tn,td);
var json = require(tn);
//json now has the data
}
要调用上面的脚本,它是一个bash一行代码:ls JSONFiles | xargs ./json2modules.js
这不是一个有效的JSON:
{
"_id" : NumberLong(528000021)
}
这是一个有效的JSON:
{
"_id" : "NumberLong(528000021)"
}
我认为你正在试图解析一个javascript对象和错误,你有是正常的。如果是这种情况,那么根本不需要解析它。