我遇到了将单个 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": [] }
因此,如您所见,我需要处理两件事:
- 添加缺失的逗号
- 从中创建数组。
为了解析这个响应,我使用了 Node JS。我尝试将其转换为数组,如下所示:
const array = `[${response.data}.replace(/}/g, '},')}{}]`
首先,我用数组包装所有内容,添加逗号和一个空对象以去除最后一个不需要的逗号。
如果我查看输出,一切似乎都正常,但是当我尝试使用 JSON.parse()
解析它时,我收到了
Unexpected ']' on position n
我不确定是我做错了什么,还是数据已经损坏,因为它太长了。
最佳答案
您可以使用正则表达式在除最后一行以外的每一行末尾添加逗号,将 someArray
更改为 "someArray"
,然后将整个字符串包围在 []
和 JSON.parse
它:
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,这样就不需要像这样的 hack。
关于javascript - 单个 JavaScript 对象列表到适当的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56182068/