Javascript 使用Node.js将/proc/meminfo格式化为JSON

Javascript 使用Node.js将/proc/meminfo格式化为JSON,javascript,json,node.js,monitoring,Javascript,Json,Node.js,Monitoring,我正在使用它为我的家庭服务器a和a制作一个监控API。在这样做的过程中,我发现我希望得到比我所能得到的更详细的内存信息 我真正想做的是将类似于cat/proc/meminfo的东西转换成JSON /proc/meminfo 在这方面,我得到的是: mem.js 这将生成一个二维数组,如下所示: [ [ 'MemTotal', ' 1017948 kB' ], [ 'MemFree', ' 120612 kB' ], [ 'Buffers', '

我正在使用它为我的家庭服务器a和a制作一个监控API。在这样做的过程中,我发现我希望得到比我所能得到的更详细的内存信息

我真正想做的是将类似于
cat/proc/meminfo
的东西转换成JSON

/proc/meminfo 在这方面,我得到的是:

mem.js 这将生成一个二维数组,如下所示:

[ [ 'MemTotal', '        1017948 kB' ],
  [ 'MemFree', '          120612 kB' ],
  [ 'Buffers', '          151492 kB' ],
  [ 'Cached', '           547424 kB' ],
  [ 'SwapCached', '            0 kB' ],
  [ 'Active', '           585824 kB' ],
  [ 'Inactive', '         215456 kB' ],
  [ 'Active(anon)', '     102528 kB' ],
  [ 'Inactive(anon)', '      268 kB' ],
  [ 'Active(file)', '     483296 kB' ],
  [ 'Inactive(file)', '   215188 kB' ],
  [ 'Unevictable', '           0 kB' ],
  [ 'Mlocked', '               0 kB' ],
  [ 'SwapTotal', '             0 kB' ],
  [ 'SwapFree', '              0 kB' ],
  [ 'Dirty', '                88 kB' ],
  [ 'Writeback', '             0 kB' ],
  [ 'AnonPages', '        102412 kB' ],
  [ 'Mapped', '            13416 kB' ],
  [ 'Shmem', '               432 kB' ],
  [ 'Slab', '              81224 kB' ],
  [ 'SReclaimable', '      72408 kB' ],
  [ 'SUnreclaim', '         8816 kB' ],
  [ 'KernelStack', '         648 kB' ],
  [ 'PageTables', '         3632 kB' ],
  [ 'NFS_Unstable', '          0 kB' ],
  [ 'Bounce', '                0 kB' ],
  [ 'WritebackTmp', '          0 kB' ],
  [ 'CommitLimit', '      508972 kB' ],
  [ 'Committed_AS', '     141360 kB' ],
  [ 'VmallocTotal', '   34359738367 kB' ],
  [ 'VmallocUsed', '        4136 kB' ],
  [ 'VmallocChunk', '   34359725048 kB' ],
  [ 'HardwareCorrupted', '     0 kB' ],
  [ 'AnonHugePages', '     45056 kB' ],
  [ 'HugePages_Total', '       0' ],
  [ 'HugePages_Free', '        0' ],
  [ 'HugePages_Rsvd', '        0' ],
  [ 'HugePages_Surp', '        0' ],
  [ 'Hugepagesize', '       2048 kB' ],
  [ 'DirectMap4k', '       30708 kB' ],
  [ 'DirectMap2M', '     1017856 kB' ],
  [ '' ] ]
我可以想象一个双重嵌套的for循环遍历
info()
的返回,并将元素分配给一个新对象,但这似乎不雅观


有什么更好的方法可以将
/proc/meminfo
的内容转换为JSON?

我对您的代码做了一些修改,以返回一个没有填充的普通对象。此功能未经测试(我在Windows计算机上!),但类似的功能也可以使用:

function info() {
    var info = {};
    var data = fs.readFileSync('/proc/meminfo').toString();
    data.split(/\n/g).forEach(function(line){
        line = line.split(':');

        // Ignore invalid lines, if any
        if (line.length < 2) {
            return;
        }

        // Remove parseInt call to make all values strings
        info[line[0]] = parseInt(line[1].trim(), 10);
    });

    return info;
}

我对您的代码做了一些修改,以返回一个没有填充的普通对象。此功能未经测试(我在Windows计算机上!),但类似的功能也可以使用:

function info() {
    var info = {};
    var data = fs.readFileSync('/proc/meminfo').toString();
    data.split(/\n/g).forEach(function(line){
        line = line.split(':');

        // Ignore invalid lines, if any
        if (line.length < 2) {
            return;
        }

        // Remove parseInt call to make all values strings
        info[line[0]] = parseInt(line[1].trim(), 10);
    });

    return info;
}

谢谢,这几乎正是我想要的。现在我只需要将此部分转换为活动和非活动对象。{…Active:575416,Inactive:213648,‘Active(anon)’:81568,‘Inactive(anon)’:260,‘Active(file)’:493848,‘Inactive(file)’:213388,…}作为旁白,我不认为
行[1].trim()是必要的,因为它已经忽略了前导空格。谢谢,这几乎正是我想要的。现在我只需要将此部分转换为活动和非活动对象。{…Active:575416,Inactive:213648,‘Active(anon)’:81568,‘Inactive(anon)’:260,‘Active(file)’:493848,‘Inactive(file)’:213388,…}作为旁白,我不认为
行[1].trim()是必要的,因为它已经忽略了前导空格。
function info() {
    var info = {};
    var data = fs.readFileSync('/proc/meminfo').toString();
    data.split(/\n/g).forEach(function(line){
        line = line.split(':');

        // Ignore invalid lines, if any
        if (line.length < 2) {
            return;
        }

        // Remove parseInt call to make all values strings
        info[line[0]] = parseInt(line[1].trim(), 10);
    });

    return info;
}
{
    'MemTotal': 1017948,
    ...
}