遍历JSON数据,数据格式特殊怎么处理?

后端返回一组数据,其中有一项是这样的:


 "oneWeekAll": "{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};"

 

我要如何转成正常的数组以方便循环遍历呢?

这里面每个大括号都是用分号间隔的,并且一整串在一个双引号内,搞得我有点乱套。求助大神,谢谢


附上后台返回的全部数据:


AuditRetCode:"1"

AuditRetVal:"success"

RetCode:"1"

RetVal:"1"

oneWeekAll:"{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};"


我要的东西在 oneWeekAll 里


紫衣仙女
浏览 804回答 2
2回答

宝慕林4294392

要简单点的话,就这样:const oneWeekAll = "{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};";const result = oneWeekAll.split(';').filter(item => item).map(item => {  const str = item.replace(/\{|\}/g, '')  const arr = str.split(/\:|\,/)  return {    weekStart: arr[1],    weekEnd: arr[3]  }});console.log(result);

HUX布斯

const all = "{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};";const list = all.split(";")    .filter(t => t)    .map(t => t.split(/[{},:]/))    .map(parts => ({        [parts[1]]: parts[2],        [parts[3]]: parts[4]    }));然后还写了一个比较搞笑的版本(性能肯定不怎么样)const all = "{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};";const json = all    .replace(/;?$/, "")    .replace(/,/g, "\",\"")    .replace(/:/g, "\":\"")    .replace(/;/g, ",")    .replace(/\{/g, "{\"")    .replace(/\}/g, "\"}");const list = JSON.parse(`[${json}]`);补充一下,上面最后一种肯定是很慢的,不过在 jsPerf 上测试第1种比 @Ash_Shen 的答案慢 35% 左右,尝试把两个 map 合并成一个 map,作用不大,但是改了一个对象的 key,速度一下子就起来了,居然提升了 150% (也就是2.5倍)const list = all.split(";")    .filter(t => t)    .map(t => {        const parts = t.split(/[{},:]/);        return {            weekStart: parts[2],            weekEnd: parts[4]        };    });
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript