【问题标题】:How to read a text file and return it as a JSON object in Node JS?如何在 Node JS 中读取文本文件并将其作为 JSON 对象返回?
【发布时间】:2017-01-19 22:18:29
【问题描述】:

我有一个文本文件。我需要读取函数内的文件并将其作为 JSON 对象返回。以下是抛出错误“位置 0 处 JSON 中的意外令牌 V”。

Server.js

fs.readfile('result.txt', 'utf8', function(err,data) {
    if(err) throw err;
    obj = JSON.parse(data);
    console.log(obj);
});

result.txt 如下所示

VO1:10 5 2

摄氧量:5 3 2

我想我不能直接使用 JSON.parse。我该如何进行?

【问题讨论】:

  • result.txt的内容是什么?
  • 查看 result.txt 会有所帮助。
  • 你不能,因为.txt 文件被导入为字符串iirc。您必须编写自己的解析器才能将数据转换为 json。

标签: json node.js fs


【解决方案1】:

改进@baao 的答案:

const fs = require("fs")

fs.readFile('.czrc', 'utf8', function (err, data) {
    if (err) {
        console.error(err)
        throw "unable to read .czrc file.";
    }
   const obj = JSON.parse(data)
});

【讨论】:

    【解决方案2】:

    假设如下:

    每行由换行符分隔 (\n)

    每一行都由: 分隔,其中前面的部分是键,后面的部分是 (空格)分隔的字符串,应该将键值指示为数组。

    以下应该适用于您的格式:

    fs.readfile('result.txt', 'utf8', function(err,data) {
        if(err) throw err;
        let obj = {};
        let splitted = data.toString().split("\n");
        for (let i = 0; i<splitted.length; i++) {
            let splitLine = splitted[i].split(":");
            obj[splitLine[0]] = splitLine[1].trim();
        }
        console.log(obj);
    });
    

    【讨论】:

    • 我收到一个错误,将 splitLine 作为未识别的标识符。
    • 所以有些行没有键、值或:。在将值分配给对象 @Bharg 之前尝试添加检查
    【解决方案3】:

    感谢 Baao 提供这个答案。

    作为另一种解决方案,如果您没有任何“:”可能是一个文件列表,您总是可以像这样在一个键中编码:

    var data = fs.readFileSync(pathAndFilename);
    var testData = {};
    var splitList = data.toString().split('\r\n');
    for (var i = 0; i < splitList.length; i++) {
         testData['fileNumber' + i.toString()] = splitList[i];
    }
    

    【讨论】:

    • 您好,pathAndFilename 的值是多少?
    • 这将是您要读取的文件的完整路径和文件名。又名 C:\Program Files\MyApp\Configuration\systemConfiguration.txt
    【解决方案4】:

    您需要自己解析文本文件。您可以使用 RegExp 或其他方式提取值,从中创建一个对象,然后 JSON.stringify 它。

    【讨论】:

      【解决方案5】:

      您的 result.txt 不是有效的 json。

      有效的 json 看起来像这样。

      {
        "VO1": [10, 5, 2],
        "VO2": [5, 3, 2]
      }
      

      【讨论】:

        猜你喜欢
        • 2016-04-19
        • 1970-01-01
        • 2017-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-26
        • 2016-09-10
        • 1970-01-01
        相关资源
        最近更新 更多