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

时间:2016-10-22 19:38:05

标签: javascript json node.js parsing fs

我有一个包含大量内容的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:'?

定位对象的解决方法

2 个答案:

答案 0 :(得分:4)

如果未提供编码且alternates使对象不是字符串或缓冲区,则函数readFileSync将返回buffer

在使用JSON.stringify之前,只需在toString()缓冲区上调用contents,然后使用replace()创建JavaScript对象:

JSON.parse

或提供编码:

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

答案 1 :(得分:0)

您的问题似乎不是对象键中的:,而是JSON字符串中没有包含{}的事实,这使得它无效。见这个例子:



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