在将单个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": [] }所以,正如你所看到的,我需要处理两件事:
为了解析这个响应,我使用节点JS。我尝试将其转换为数组,如下所示:
const array = `[${response.data}.replace(/}/g, '},')}{}]`首先,我用数组包装所有东西,添加逗号和一个空对象,以去掉最后不需要的逗号。
如果我看输出,一切看起来都没问题,但是当我试图用JSON.parse()解析它时,我正在接收
位置n上的意外‘]
我不确定我是做错了什么,还是数据被破坏了,因为它太长了。
发布于 2019-05-17 08:01:08
您可以使用正则表达式将逗号添加到每一行的末尾,但最后一行则将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,这样就不需要这样的黑客了。
发布于 2019-05-17 08:00:34
你需要省略最后一个逗号,如果有更多的字符出现,你要向前看。
const array = `[${response.data}.replace(/}(?=.)/g, '},')}{}]`;
// ^^^^^发布于 2019-05-17 08:18:52
如果确实无法修改此列表的响应,则可以使用以下命令:
const array = response.data.split(/\r?\n/).map(object => JSON.parse(object.replace("someArray", "\"$&\"")));每一行将被split(/\r?\n/)分割,replace("someArray", "\"$&\"")将在someArray周围添加缺少的双引号。
工作实例:
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);
https://stackoverflow.com/questions/56182068
复制相似问题