首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单个JavaScript对象到适当数组的列表

单个JavaScript对象到适当数组的列表
EN

Stack Overflow用户
提问于 2019-05-17 07:58:04
回答 3查看 60关注 0票数 1

在将单个JavaScript对象转换为适当的JavaScript数组时,我遇到了一个问题。

清单如下:

代码语言:javascript
运行
复制
{ "property1": "value", someArray: [123], "property2": [] }
{ "property1": "value", someArray: [123], "property2": [] }
{ "property1": "value", someArray: [123], "property2": [] }
{ "property1": "value", someArray: [123], "property2": [] }
{ "property1": "value", someArray: [123], "property2": [] }

所以,正如你所看到的,我需要处理两件事:

  1. 添加缺失逗号
  2. 从它创建数组。

为了解析这个响应,我使用节点JS。我尝试将其转换为数组,如下所示:

代码语言:javascript
运行
复制
const array = `[${response.data}.replace(/}/g, '},')}{}]`

首先,我用数组包装所有东西,添加逗号和一个空对象,以去掉最后不需要的逗号。

如果我看输出,一切看起来都没问题,但是当我试图用JSON.parse()解析它时,我正在接收

位置n上的意外‘]

我不确定我是做错了什么,还是数据被破坏了,因为它太长了。

EN

回答 3

Stack Overflow用户

发布于 2019-05-17 08:01:08

您可以使用正则表达式将逗号添加到每一行的末尾,但最后一行则将someArray更改为"someArray",然后用[]JSON.parse包围整个字符串:

代码语言:javascript
运行
复制
const response = `{ "property1": "value", someArray: [123], "property2": [] }
{ "property1": "value", someArray: [123], "property2": [] }
{ "property1": "value", someArray: [123], "property2": [] }
{ "property1": "value", someArray: [123], "property2": [] }
{ "property1": "value", someArray: [123], "property2": [] }`;

const json = '[' + response.replace(/}(?!$)/g, '},').replace(/someArray/g, '"$&"') + ']';
const arr = JSON.parse(json);
console.log(arr);

但是,这仍然是一个X/Y问题--最好是修复为您提供服务的任何数据(实际上已经损坏),以便让它为您提供正确的JSON,这样就不需要这样的黑客了。

票数 3
EN

Stack Overflow用户

发布于 2019-05-17 08:00:34

你需要省略最后一个逗号,如果有更多的字符出现,你要向前看。

代码语言:javascript
运行
复制
const array = `[${response.data}.replace(/}(?=.)/g, '},')}{}]`;
//                                         ^^^^^
票数 1
EN

Stack Overflow用户

发布于 2019-05-17 08:18:52

如果确实无法修改此列表的响应,则可以使用以下命令:

代码语言:javascript
运行
复制
const array = response.data.split(/\r?\n/).map(object => JSON.parse(object.replace("someArray", "\"$&\"")));

每一行将被split(/\r?\n/)分割,replace("someArray", "\"$&\"")将在someArray周围添加缺少的双引号。

工作实例:

代码语言:javascript
运行
复制
const response = {
  "data": `{ "property1": "value", someArray: [123], "property2": [] }
           { "property1": "value", someArray: [123], "property2": [] }
           { "property1": "value", someArray: [123], "property2": [] }
           { "property1": "value", someArray: [123], "property2": [] }
           { "property1": "value", someArray: [123], "property2": [] }`
}

const array = response.data.split(/\r?\n/).map(line => JSON.parse(line.replace("someArray", "\"$&\"")));

console.log(array);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56182068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档