【问题标题】:Getting JSON Array in node.js在 node.js 中获取 JSON 数组
【发布时间】:2017-02-09 05:35:46
【问题描述】:

我正在尝试将读取的对象数组解析为文件中的 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,因此您无法将其解析为 JSON。在 JSON 中,键必须用引号引起来,并且只有双引号才有效表示字符串。 json.org/example.html.
  • 同时粘贴记录的数据。
  • 尽量使用require('Out.json')来避免fs
  • @FelixKling 谢谢,我弄错了,出了什么问题.. 非常感谢.. :)
  • @RaR .. 当然:)

标签: javascript json node.js


【解决方案1】:

你必须先使用 JSON.parse() 函数来解析 json 数据,然后 JSON.stringify() 将整个数据转换成字符串格式显示在你想要的地方!

【讨论】:

  • 请阅读我们的社区指南以及如何回答问题
  • @ochi 我一定会的!我也是新手!!
  • 不是有两个答案,你能把它们合二为一吗? (然后删除另一个) - 使用答案底部的编辑链接来修改它。欢迎来到 StackOverflow :)
【解决方案2】:

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);
    });
})

【讨论】:

  • 这可能(或可能不会)回答这个问题,但没有任何关于它的作用的解释,新手很难弄清楚为什么这是一个好的答案。为了社区的利益,请添加代码 cmets 或某种形式的简要说明
【解决方案3】:

正如@FelixKling 在 cmets 中指出的,您的 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);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2016-08-05
    • 2019-05-13
    • 1970-01-01
    • 2015-10-29
    • 2020-08-15
    相关资源
    最近更新 更多