繁体   English   中英

在node.js中获取JSON数组

[英]Getting JSON Array in node.js

我正在尝试将读取的对象数组解析为文件中的json数据以循环它。 Out.json文件内容

[ { id: 10,
    name: 'ProspectJourney',
    details:
     { name: 'ProspectJourney',
       created_at: 1482943640422,
       versioning: null },
    m_id: 1,
    monit: { memory: 192741376, cpu: 0 } },
  { id: 10904,
    name: 'Servicing',
    details:
     { name: 'Servicing',
       created_at: 1482943651962,
       versioning: null },
    m_id: 2,
    monit: { memory: 186843136, cpu: 0 } } ]

虽然我能够将缓冲区转换为字符串并将其记录下来。

const fs = require('fs');
const dataPromise = new Promise(function (resolve, reject) {
    fs.readFile('Out.json', function(err, data) {
        if (err)
            reject(err);
        else
            resolve(data);
    })
})

dataPromise.then((result) => {
    console.log(result.toString());
})

如果我尝试解析它也不会发生同样的情况。 你能告诉我我的错吗?

不工作

dataPromise.then((result) => {
    console.log(JSON.parse(result.toString()));
})

Nodejs版本4.3.1

请不要建议使用任何npm模块

你必须首先使用JSON.parse()函数来解析json数据,然后使用JSON.stringify()将整个数据转换为字符串格式以显示在任何你想要的位置!

USERS.JSON

{
   "user1" : {
      "name" : "mahesh",
      "password" : "password1",
      "profession" : "teacher",
      "id": 1
   },
   "user2" : {
      "name" : "suresh",
      "password" : "password2",
      "profession" : "librarian",
      "id": 2
   },
   "user3" : {
      "name" : "ramesh",
      "password" : "password3",
      "profession" : "clerk",       
      "id": 3
   }
}

      var express = require('express');
            var app = express();
        var fs = require("fs");

    app.get('/listUsers', function (req, res) {
    fs.readFile(__dirname + "/" + "users.json", 'utf8', function (err, data) {


        console.log(data);
        res.end(data);
    });
})

正如@FelixKling在评论中指出的那样,您的JSON无效:

  1. 键必须是双引号
  2. 单引号必须用双引号替换

你在输出中没有看到这个的原因是因为你的Promise没有.catch (参见下面的例子)。

让程序运行的一种方法是使用双引号对单引号执行全局替换,并按如下方式引用键:

const fs = require('fs');
const dataPromise = new Promise(function (resolve, reject) {
fs.readFile('Out.json', function(err, data) {
    if (err)
        reject(err);
    else
        resolve(data);
    })
})

dataPromise.then((result) => {
  let jsonStr = result.toString();

  // PUT THE KEYS IN DOUBLE QUOTES AND REPLACE SINGLE QUOTES WITH DOUBLE QUOTES
  jsonStr = jsonStr.replace(/(\w*):/g, function(match, key, offset, string){
    return `"${key}":`;
  }).replace(/'/g, '"');

  // YOU CAN SEE WHAT THE REPLACED STRING LOOKS LIKE IF YOU UNCOMMENT THE LINE BELOW
  // console.log("Converted String: \n" + jsonStr);

  console.log("Parse JSON and print it:");
  console.log(JSON.parse(jsonStr));
})
.catch(err => {
  // PRINT OUT THE ERROR THAT OCCURRED IN THE PROMISE
  console.log(err);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM