NodeJS JSON.parse(…)需要永久完成(在WebStorm的debugging器下)

编辑

这个问题似乎与WebStorm本身有关,它似乎不想处理包含大量嵌套对象的对象。 无论是想显示Watches窗口内的对象内容。 这个问题有点奇怪,因为我能够检查这个string,它的加载非常快。 看起来像一个WebStorm问题


我有一个相对较大的JSON文件4.9MB,我需要在NodeJS中处理,该文件存储在文件系统中,并使用以下代码行加载:

var path = require('path'); var filename = path.join(__dirname, 'db_asci.json'); var fs = require('fs'); var content = fs.readFileSync(filename); debugger; var decycledObj = JSON.parse(content); debugger; 

问题是在第一个debugger; 断点被击中,第二个不是,我等了20多分钟,什么也没有,一个处理器核心被加载到100%。 我无法debugging该function,因为它是本地的。

这里是JSON的ASCI版本

这里是UTF8版本的JSON

我究竟做错了什么?

您正在运行的问题不是 JSONparsing耗时太长。 确实,试试这个:

 var start = Date.now(); var obj = JSON.parse(fs.readFileSync(filename)); console.log('Took', Date.now() - start, 'ms'); 

你可能会看到它花了不到一秒钟左右。

你遇到的是debugging器本身的一个问题 – 观察者效应。 观察一个系统的行为改变了这个系统。

我假设你正在使用节点检查器。 每当你有一个非常大的,复杂的对象时,将对象加载到检查器中是非常昂贵的。 当它这样做的时候,你的节点进程会挂住CPU,事件循环暂停。

我的猜测是JSON被parsing,并创build了一个巨大的(假设我们正在处理5MB)对象。 然后节点击中第二个debugger ,检查员需要加载当地人。 令人难以忍受的缓慢的过程开始,检查员不会显示你已经达到了一个断点,直到完成。 所以对你来说它只是看起来冻结。

尝试用一些小的replace你的JSON文件(如{a:1} )。 它应该快速加载。


你真的需要目视检查整个物体吗? 有些工具更适合查看JSON文件。

您可以要求 .json文件。 所以,不需要parsing。

 var content = require('./db_asci.json'); 

这应该做到这一点!

Pradeep Mahdevu解决scheme的+ 1,这是另一种方式相同的事情,(与asynchronous版本编辑)

 var fs = require ('fs'); var options = { encoding: 'utf8' }; var jsonData = fs.readFile('db_asci.json', options, function (err, data) { if (err) throw err; var object = JSON.parse(data); });