遍历对象并超过最大调用堆栈大小

时间:2019-10-05 07:07:15

标签: node.js json

我正在尝试读取结构为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仍然是字符串。为什么不将其转换为对象?

1 个答案:

答案 0 :(得分:0)

您的代码几乎没有问题。首先,您不需要JSON.stringifyJSON.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;
        }   
    }
}