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