为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

紫衣仙女 2019-02-14 18:15:05
后端返回一组数据,其中有一项是这样的: "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 里
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

要简单点的话,就这样:


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);


查看完整回答
反对 回复 2019-02-27
?
HUX布斯

TA贡献1876条经验 获得超6个赞

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]

        };

    });


查看完整回答
反对 回复 2019-02-27
  • 2 回答
  • 0 关注
  • 803 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信