解析“......没有方法'replace'”时出现JSON错误
Posted
技术标签:
【中文标题】解析“......没有方法\'replace\'”时出现JSON错误【英文标题】:JSON Error when parsing "... has no method 'replace'"解析“......没有方法'replace'”时出现JSON错误 【发布时间】:2011-08-19 12:47:24 【问题描述】:让我承认我是一个完整的编程和 javascript 菜鸟,这一事实是我麻烦的根源。
我正在尝试从使用 json.stringify 保存到的文本文件中填充大量自定义对象。当我抓取文件内容和 json.parse(them) 时,出现以下错误:
var backSlashRemoved = text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]4)/g, '@'
^
TypeError: Object (contents of file) has no method 'replace'
导致这个错误的代码是:
fs.readFile('/savedcustomobjectarray', function (err, data)
var customobjectarray = json.parse(data);
);
我猜我做错了。我看到有些人提到了这类事情的序列化程序,但我想仔细检查这是否是我需要的(也许可以就如何在这种情况下使用它们获得一些指导)。不过,似乎 stringify 输出很好,所以我不确定为什么 JSON 不能再次将小矮人重新组合在一起。任何帮助将不胜感激。
编辑: text.replace 行在 /vendor/commonjs-utils/lib/json-ext.js 中,而不是我的代码。我认为这是 JSON 的一部分。也许我错了?有没有其他方法可以通过 JSON 解析我的对象数组?
【问题讨论】:
.replace
只能在字符串上调用。检查文本是字符串还是其他对象
你到底想用你的正则表达式做什么?
@JohnP 我不确定如何应用你所说的。文件中的文本是字符串化的 JSON 文件,而 text.replace 不在我的代码中,而是来自 json.parse(data) 代码。
@Drackir 对不起,我的笨拙又来了。我的正则表达式到底是哪一部分?
@clixby 替换里面的部分,请您编辑您的问题,向我们展示数据样本并解释整个过程
【参考方案1】:
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);
);
Node API docs 是你最好的朋友!
【讨论】:
以上是关于解析“......没有方法'replace'”时出现JSON错误的主要内容,如果未能解决你的问题,请参考以下文章