我正在尝试读取结构为this
的文件的内容获取对象时,我试图找到其嵌套属性名称ErrorCode。但是函数fetch_property始终返回未定义。
这是函数
read_content = (path) => {
fs.readFile(path, 'utf8', function (error, data) {
json_data = data
// console.log(data)
data = JSON.parse(JSON.stringify(data))
tem_data = data
// Object.keys(data).forEach(key => console.log(key))
// tem_data = data['Response']['Error']
let result = fetch_property(data, "ErrorCode");
console.log(result)
})
}
fetch_property = (obj, property) => {
if (obj[property] == property) {
return obj[property]
} else {
for (let i in obj) {
let found_label = fetch_property(obj[i], property)
if (found_label) return found_label
}
}
}
如何从readFile函数返回的内容中获取ErrorCode属性的值?
我刚刚发现,即使使用JSON.parse,数据的typeof仍然是字符串。为什么不将其转换为对象?
答案 0 :(得分:0)
您的代码几乎没有问题。首先,您不需要JSON.stringify
。 JSON.parse
就足够了。其次,您的if语句if (obj[property] == property)
不起作用。您应该首先遍历所有项目的属性。这是一个工作示例:
const fs = require('fs');
fs.readFile('temp.json', (err, data) => {
if (err) throw err;
var json = JSON.parse(data);
var result = fetch_property(json, "ErrorCode");
console.log(result)
});
fetch_property = (obj, property) => {
for (var item in obj) {
if (item == property)
return obj[item];
if (typeof obj[item] == "object") {
var result = fetch_property(obj[item], property);
if (typeof result != "undefined")
return result;
}
}
}