从 JSON 文件中删除字符串的实例,然后解析它

Removing instances of a string from a JSON file and then parsing it

我有一个包含很多内容的 JSON 文件,我用 fs Node.js 模块加载它。但是当我查看 JSON 文件时,我注意到许多字段名称都附加了一串字符,这使得它无法在 JS 中定位。它看起来像这样:

"bk:ParentField": {
       "bk:Field": "Value",
       "bk:Field2": "Value2"
}

我想删除 bk: 部分,因为我无法定位其中包含它们的对象。我的代码如下所示:

 var contents = fs.readFileSync("results.json");
 var jsonContent = JSON.parse(JSON.stringify(contents).replace(/bk:/g, '' ));

问题是,每当我尝试在 运行 上面的代码之后定位一个项目时,我都会收到一个错误,提示未定义,或者如果我执行 jsonContent['bk:ParentField'] 之类的操作,我仍然会收到一个未定义的错误。 关于为什么会发生这种情况的任何想法?或者是否有使用 'bk:'?

定位对象的解决方法

您的问题似乎不是对象键中的 :,而是 JSON 字符串中没有封闭的 {},这使其无效。看这个例子:

var parsed = JSON.parse(`{
  "bk:ParentField": {
    "bk:Field": "Value",
    "bk:Field2": "Value2"
  }
}`)
console.log(parsed['bk:ParentField'])

函数 readFileSync returns a buffer 如果未提供编码并且 JSON.stringify 采用对象而不是字符串或缓冲区。

只需在 contents 缓冲区上调用 toString(),然后再使用 replace(),然后使用 JSON.parse 创建一个 JavaScript 对象:

fs = require('fs');

var contents = fs.readFileSync("test.json");
var data = JSON.parse(contents.toString().replace(/bk:/g, ''));

或提供编码:

fs = require('fs');

var contents = fs.readFileSync("test.json", "utf-8");
var data = JSON.parse(contents.replace(/bk:/g, ''));

这两种方法都会产生预期的结果并允许使用 . 运算符访问属性:

console.log(data.ParentField.Field);

如果您不介意像这样访问属性,则 replace 不是严格要求的:

var data = JSON.parse(fs.readFileSync("test.json", "utf-8"));
console.log(data["bk:ParentField"]["bk:Field"])