【问题标题】:I can't read a JSON file with node.js我无法使用 node.js 读取 JSON 文件
【发布时间】:2017-05-28 15:27:01
【问题描述】:

嗨,我在 Node.js 中得到了以下代码

fs.readFile(file, function(err, obj) {
    obj.data1.forEach(function(element) {
        console.log (element.key, element.key1);
    });
})

我正在尝试以以下 json 格式显示所有的键和值:

{
    "data1": {
        "key": "iohiohio",
        "key1": "jhuihuj"
    },
    "data2": {
        "key4": "hoih",
        "key5": "kjhi"
   }
}

所以我希望结果是这样的:

key1:jhuihuj , key4: 嗨

并显示在 html/ejs 文件中。

【问题讨论】:

    标签: javascript node.js express ejs


    【解决方案1】:

    问题是obj 是从fs.readFile 作为缓冲区或字符串返回的(如果提供了utf-8 格式)。

    为了将字符串或缓冲区转换为实际对象,您必须使用JSON.parse() 方法。

    这是一个注释代码,可以一步一步理解要做什么:

    var fs = require("fs");
    fs.readFile("./file.json",  "utf-8", function(err, obj) {
        // print your json file to the screen
        console.log(obj);
    
        // parse the obj string and convert it to an actual object
        obj = JSON.parse(obj);
    
        // print the properties of obj.data1 as "key : value"
        for (k in obj.data1) {
            console.log(k, ":", obj.data1[k]);
        }
    })
    

    控制台结果:

    D:\workspace\projects\node>node server
    {
        "data1": {
            "key": "iohiohio",
            "key1": "jhuihuj"
        },
        "data2": {
            "key4": "hoih",
            "key5": "kjhi"
       }
    }
    key : iohiohio
    key1 : jhuihuj
    

    【讨论】:

    【解决方案2】:

    将值放入数组有什么意义?这是多余的,因为您在其中只有一个对象。你可以去掉方括号,只剩下这个:

    {
        "data1": {
            "key": "iohiohio",
            "key1": "jhuihuj"
        },
        "data2": {
            "key4": "hoih",
            "key5": "kjhi"
        }
    }
    

    然后,你会像这样循环它:

    fs.readFile(file, function(err, obj) {
        for (var k in obj.data1) {
            console.log(k + ": " + obj.data1[k]);
        }
    });
    

    不过,这只会打印data1 中的键!要打印所有内容,您应该使用:

    fs.readFile(file, function(err, obj) {
        try {
            obj = JSON.parse(obj);
        } catch(e) {
            console.log("Error while parsing");
            return;
        }
    
        for (var k in obj) {
            for (var k2 in obj[k]) {
                 console.log(k + " - " + k2 + ": " + obj[k][k2]);
            }
        }
    });
    
    // Result
    // data1 - key: iohiohio
    // data1 - key1: jhuihuj
    // data2 - key4: hoih
    // data2 - key5: kjhi
    

    编辑:你应该解析obj。最好将它放在 try catch 块中,以防 JSON 错误且无法解析。

    你也可以检查this,你可以用require加载json:

    var obj = require("./jsonfile");
    for (var k in obj) {
        for (var k2 in obj[k]) {
             console.log(k + " - " + k2 + ": " + obj[k][k2]);
        }
    }
    

    【讨论】:

    • 我如何得到这个先生 key1:jhuihuj
    • 我没有看到你解析文件数据的那一行,所以我看不出它是如何工作的。 fs.readFile 应该返回一个 Buffer 对象。除非我错过了什么……
    • 嗨@HristiyanDodov 我如何只打印1?喜欢键:iohiohio
    • 究竟是哪一个?告诉我你的目标是什么?你想达到什么目标?
    猜你喜欢
    • 2021-05-11
    • 2014-08-07
    • 1970-01-01
    • 2015-03-14
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多