解析“......没有方法'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错误的主要内容,如果未能解决你的问题,请参考以下文章

解析程序包时出现问题,怎么处理?

解析包时出现问题是啥意思,怎样才能解决

解析软件包时出现问题应该怎么处理?

解析程序包时出现问题怎么办

从推送通知解析时出现 SwiftyJson 解析问题

防止vuejs在解析时出现闪烁