从 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"])
我有一个包含很多内容的 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"])