【问题标题】:NodeJS Newline delimited strings to array of objectsNodeJS换行符分隔字符串到对象数组
【发布时间】:2021-12-07 06:58:03
【问题描述】:

如何使文本文件被读取为:

`{'values': [0,1,0], 'key': 0}
{'values': [1,1,0], 'key': 1}
{'values': [1,1,0], 'key': 1}`

通过:

  var fs = require('fs');
  fs.readFile("logfile.txt", 'utf8', function(err, data){

  console.log("DATA: ", data);
  return data
   });
  console.log('readFile called');

字典列表以换行符分隔成一个数组。

想要的输出:

[{'values': [0,1,0], 'key': 0},
    {'values': [1,1,0], 'key': 1},
    {'values': [1,1,0], 'key': 1}]

【问题讨论】:

  • JSON 是一种文本格式,其规则之一是键必须用特定字符引用(",而不是')。因此,您的“想要的输出”不是 JSON。看来您真正想要的是一个数组,而不是 JSON。也就是说,期望提问者对他们的问题进行一些研究(参见How to Ask)。
  • 我完全不知道你的问题的文本文件是什么样子的。
  • @Gayathri 每行包含一个类似字典的字符串。我希望把它做成一个 json 数组。
  • @HereticMonkey 如果我们按照您的条款进行,我可以将其设为字符串数组并且无法使用其键,因为每一行都没有被格式化为 json。这就是我写 Json 的原因,因为我希望能够通过其中的键访问这些值。但是你不清楚它是一个数组是正确的。
  • 不,如果按照我的说法,如果它是 JSON,那么整个事情将是一个字符串,你将无法用它做任何事情。这才是重点。 JSON 是文本。如果您希望能够通过索引和键访问值,它必须是对象数组,而不是 JSON。

标签: javascript node.js arrays


【解决方案1】:
const str = `{'values': [0,1,0], 'key': 0}
             {'values': [1,1,0], 'key': 1}
             {'values': [1,1,0], 'key': 1}`;

看到字符串的结构,你可以用正则解析它来提取对象

const match = str.match(/({.*})/gm);

然后你必须更正字符串以使用双引号(JSON 仅使用双引号)并解析每个字符串

const result = match.map(objStr => {
  objStr = objStr.replace(/'/g, '"')
  return JSON.parse(objStr)
});

【讨论】:

  • 谢谢!正是我需要的我尝试拆分它,但似乎不是一个优雅的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 2013-05-06
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多