亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在nodejs中將txt文件轉換為json

在nodejs中將txt文件轉換為json

撒科打諢 2022-11-27 17:13:06
我有一個.txt由管道分隔數據組成的文件。如下圖。HEADER1|HEADER2|HEADER3Value1|Value2|Value3Value4|Value5|Value6Value7|Value8|Value9我希望能夠從文本文件中返回如下所示的對象數組。[  { HEADER1: 'Value1', HEADER2: "Value2", HEADER3: 'Value3' },  { HEADER1: 'Value4', HEADER2: "Value5", HEADER3: 'Value6' },  { HEADER1: 'Value7', HEADER2: "Value8", HEADER3: 'Value9' }]我怎樣才能做到這一點?
查看完整描述

3 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

好吧,簡單的方法是這樣的:


// Raw data

const raw = `HEADER1|HEADER2|HEADER3

Value1|Value2|Value3

Value4|Value5|Value6

Value7|Value8|Value9`;


// Or load raw data from file

const fs = require('fs');

const raw = (fs.readFileSync('file.txt')).toString();


// Split data by lines

const data = raw.split('\n');


// Extract array of headers and

// cut it from data

const headers = (data.shift()).split('|');


// Define target JSON array

let json = [];


// Loop data

for(let i = 0; i < data.length; i++) {

  // Remove empty lines

  if(/^\s*$/.test(data[i])) continue;

  // Split data line on cells

  const contentCells = data[i].split('|');

  // Loop cells

  let jsonLine = {};

  for(let i = 0; i < contentCells.length; i++) jsonLine[headers[i]] = contentCells[i];

  // Push new line to json array

  json.push(jsonLine);

}


// Result

console.log(json);

例子在這里


查看完整回答
反對 回復 2022-11-27
?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

看看csv2json。您可以使用管道作為自定義分隔符



查看完整回答
反對 回復 2022-11-27
?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

一個名為readline的核心模塊將是最好的選擇

const fs = require('fs');

const readline = require('readline');


async function processLineByLine() {

  const fileStream = fs.createReadStream('input.txt');


  const rl = readline.createInterface({

    input: fileStream,

    crlfDelay: Infinity

  });

  // Note: we use the crlfDelay option to recognize all instances of CR LF

  // ('\r\n') in input.txt as a single line break.


  const finalResult = [];

  let keys = [];

  let i = 0;

  for await (const line of rl) {

     //Extract first line as keys

     if(i === 0) keys = line.split('|');

     else {

        const lineArray = line.split('|');

        const result = keys.reduce((o, k, i) => ({...o, [k]: lineArray[i]}), {});

       // Or try

       // result = Object.assign(...keys.map((k, i) => ({[k]: lineArray[i]})));


      // Or

      // let result = {};

      // keys.forEach((key, i) => result[key] = lineArray[i]);


        finalResult.push(result);

        console.log(result);

     }

     i++;


  }

  return finalResult;

}


processLineByLine();


查看完整回答
反對 回復 2022-11-27
  • 3 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號