将函数的范围注入JSON.parse

时间:2016-10-19 15:41:26

标签: json node.js

我有一堆JSON文件需要解析(在节点中),但是许多文件都有这样的东西:

"_id" : NumberLong(528000021)

其中NumberLong是一个超出JSON文件范围的函数。当我运行JSON.parse时,我得到一个错误(可以理解)它发现了一个意外的令牌。有没有办法创建一个函数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 one-liner:

ls JSONFiles | xargs ./json2modules.js

1 个答案:

答案 0 :(得分:1)

这不是有效的JSON:

{
    "_id" : NumberLong(528000021)
}

这是一个有效的JSON:

{
    "_id" : "NumberLong(528000021)"
}

我认为您正在尝试解析javascript对象,而您所遇到的错误是正常的。如果是这种情况,那么您根本不需要解析它。