Node JS从文件加载JSON数组

时间:2016-10-11 15:38:14

标签: javascript json node.js

创建了一个json文件,其中包含漂亮的打印文件

    load: function () {
              var chart = this;
              $('#container').on('mousemove', function () {
                var point = chart.hoverPoints && chart.hoverPoints[0];
                    $('#btn').html(point ? point.close : 'shows close value');
              });
            }
           }

我可以用那个

读取文件
[
  {
    "name": "c",
    "content": 3,
    "_prototype": "item"
  },
  {
    "name": "d",
    "content": 4,
    "_prototype": "item"
  }
]

但输出顺序相反

var fs = require('fs');
var arrayPath = './array.json';

function fsReadFileSynchToArray (filePath) {
    var data = JSON.parse(fs.readFileSync(filePath));
    console.log(data);
    return data;
}

var test  = arr.loadFile(arrayPath);
console.log(test);

显然第二个输出显示为第一个。我实际上使用了同步文件读取来避免这种空数据。有没有办法真正确保JSON文件在继续之前完全读入数组?

[更新] arr是一个使用

的模块
[]
[ { name: 'c', content: 3, _prototype: 'item' },
  { name: 'd', content: 4, _prototype: 'item' },]

返回值

4 个答案:

答案 0 :(得分:15)

只要文件位于项目文件夹(配置文件,即)中,您就可以直接在NodeJS中同步加载它。

var test = require('./array.json');

然后在下一个执行的句子中将内容加载到您的变量中。

你可以尝试console.log它,它会打印出来:

[ { name: 'c', content: '3', _prototype: 'item' },
  { name: 'd', content: '4', _prototype: 'item' } ]

完全按照文件的顺序排列。

答案 1 :(得分:3)

fs.stat是异步的,所以你的函数是异步的。

您想要fs.fstatSync

答案 2 :(得分:1)

不建议在加载前测试文件是否存在,这也是不推荐使用fs.exists的原因:

  

在调用fs.exists()之前,使用fs.open()检查文件是否存在,不建议使用fs.readFile()fs.writeFile()。这样做会引入竞争条件,因为其他进程可能会在两次调用之间更改文件的状态。相反,用户代码应直接打开/读取/写入文件,并在文件不存在时处理引发的错误。

您使用fs.stats的方式仅相当于已弃用的fs.exists

因此,您应该始终认为文件在阅读时不会退出。

对于同步通话,您应该写:

var data;

try {
   data = JSON.parse(fs.readFileSync(filePath));
} catch ( err ) {
   // handle your file not found (or other error) here
}

var data;

try {
   data = require('./array.json');
} catch ( err ) {
   // handle your file not found (or other error) here
}

如果以异步方式执行此操作,请检查回调函数的错误参数,以便在文件不存在时处理该情况:

fs.readFile(filePath, (err, fileContent) => {
    var data;
    if( err ) {
      // handle your file not found (or other error) here
    } else {
      data = JSON.parse(fileContent);
    }
})

答案 3 :(得分:0)

const fs=require('fs');
var obj = JSON.parse(fs.readFileSync('file.json', 'utf8'));
console.log(obj);