2011-05-05 65 views
2

让我先承认我是一个完整的编程和javascript noob,并且事实是我的麻烦来源。解析“......没有方法”时出现JSON错误'替换'“

我想从我用json.stringify保存到的文本文件填充大量自定义对象。当我抓住了文件的内容和JSON.parse(他们),我收到以下错误:

fs.readFile('/savedcustomobjectarray', function (err, data) { 
    var customobjectarray = json.parse(data); 
}); 

我猜我要去:

var backSlashRemoved = text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@' 
          ^
TypeError: Object (contents of file) has no method 'replace' 

导致此错误的代码关于这一切都错了。我看到一些人提到序列化这种事情,但我想仔细检查,如果这是我所需要的(也许在这种情况下如何使用它们的方向)。但是,似乎stringify的输出很好,所以我不确定为什么JSON不能再把矮胖的东西放回去。任何帮助将不胜感激。

编辑: text.replace行在/vendor/commonjs-utils/lib/json-ext.js,不是我的代码。我认为这是JSON的一部分。也许我错了?有没有不同的方式来解析我的对象数组通过JSON?

+9

'.replace'只能在String上调用。检查文本是字符串还是其他对象 – JohnP 2011-05-05 15:57:16

+1

你正在试图用你的正则表达式做什么? – 2011-05-05 16:01:06

+0

@JohnP我不知道如何应用你所说的话。文件中的文本是字符串化的JSON文件,而text.replace不在我的代码中,而是从json.parse(数据)代码中引入。 – clixby 2011-05-05 16:02:54

回答

5

fs.readFile需要2个或3个参数,只传递文件名和回调的时候,那么你的回调函数将得到以下两个参数(err, data)其中data是原始buffer

所以正确的方式做这将是:

fs.readFile('/savedcustomobjectarray', function (err, data) { 
    var customobjectarray = JSON.parse(data.toString('utf8')); 
}); 

data.toString采用的编码作为第一个参数。

Alternitavley你可以指定编码作为第二个参数fs.readFile并将它传递一个字符串给回调:

fs.readFile('/savedcustomobjectarray', 'utf8', function (err, data) { 
    var customobjectarray = JSON.parse(data); 
}); 

节点API docs是你最好的朋友!