使用节点js循环遍历json文件时未定义目录

时间:2015-12-18 19:46:56

标签: json node.js

我收到的错误是"目录未定义"我真的不知道这是否意味着我的代码或我的json文件。这是我用https://jsonformatter.curiousconcept.com/

检查格式的json文件
    [
    {
    "directory": "C:\\Users\\PCAdmin\\Downloads\\jsonin",
    "dirID": "dir01"
    },
    {
    "directory": "C:\\Users\\PCAdmin\\Downloads\\jsonout",
    "dirID": "dir02"
    }
    ]

以下是我的代码,根据我见过的示例应该可行,但我似乎无法克服错误;

    'use strict';
    var fs = require('fs'); 
    var jsonObj = require("./jsonDirectories.json");
    for(directory in jsonObj) {
      console.log("Dir: "+jsonObj.directory);
    }

我确定它有点蠢,但任何方向都会受到赞赏

3 个答案:

答案 0 :(得分:1)

在使用之前,您需要declare directory变量:

for (let item of jsonObj) {
  // This line also needed fixing:
  console.log("Dir: ", item.directory);
}

答案 1 :(得分:1)

错误表示代码第4行的变量directory未初始化。以下代码将修复该错误:

'use strict';
var fs = require('fs'); 
var jsonObj = require("./jsonDirectories.json");
for (var dirInfo in jsonObj) {
    console.log("Dir: " + dirInfo.directory);
}

但是,这仍然无法执行您想要的操作,因为in运算符对数组不起作用。 in运算符通常用于获取对象的键(然后是should still be used carefully)。

要遍历您的目录信息数组,您需要的是:

'use strict';
var fs = require('fs'); 
var jsonObj = require('./jsonDirectories.json');
jsonObj.forEach(function(dirInfo) {
    console.log('Dir: '+dirInfo.directory);
}

(我也删除了混合的单引号和双引号,这是一种很好的做法。)

答案 2 :(得分:0)

在node.js中使用for(directory in jsonObj)时,目录将分配给每个项目的索引,而不是值。所以你可以使用jsonObj[directory]来获取目录。

但在我看来,这种替代方案更好:

jsonObj.forEach( function(directory) { 
  console.log("Dir: "+ directory);
});