Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js中获取JSON数组_Javascript_Json_Node.js - Fatal编程技术网

Javascript 在node.js中获取JSON数组

Javascript 在node.js中获取JSON数组,javascript,json,node.js,Javascript,Json,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 } },

我试图将读取的对象数组从文件解析为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无效:

  • 键必须用双引号括起来
  • 单引号必须替换为双引号
  • 您没有在输出中看到这一点的原因是因为您的承诺没有一个
    .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);
    });
    

    该文件不包含有效的JSON,因此无法将其解析为JSON。在JSON中,键必须加引号,并且只有双引号才能有效地表示字符串。同时粘贴记录的数据。尝试使用
    require('Out.json')
    以避免
    fs
    @FelixKling谢谢,我弄错了,出了什么问题。。非常感谢……)@拉尔。。当然:)这可能(也可能不)回答了这个问题,但没有任何解释,新手很难理解为什么这是一个好答案。为了社区的利益,请添加代码注释或某种形式的简要说明。请阅读我们的社区指南以及如何回答questions@ochi我一定会的!!我也是新手!!你能把两个答案合并成一个吗?(然后删除另一个)-使用答案底部的编辑链接对其进行修改。欢迎来到StackOverflow:)