dataProcess.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // padStart 的 polyfill,因为某些机型或情况,还无法支持es7的padStart,比如电脑版的微信小程序
  2. // 所以这里做一个兼容polyfill的兼容处理
  3. if (!String.prototype.padStart) {
  4. // 为了方便表示这里 fillString 用了ES6 的默认参数,不影响理解
  5. String.prototype.padStart = function(maxLength, fillString = ' ') {
  6. if (Object.prototype.toString.call(fillString) !== "[object String]") throw new TypeError(
  7. 'fillString must be String')
  8. let str = this
  9. // 返回 String(str) 这里是为了使返回的值是字符串字面量,在控制台中更符合直觉
  10. if (str.length >= maxLength) return String(str)
  11. let fillLength = maxLength - str.length,
  12. times = Math.ceil(fillLength / fillString.length)
  13. while (times >>= 1) {
  14. fillString += fillString
  15. if (times === 1) {
  16. fillString += fillString
  17. }
  18. }
  19. return fillString.slice(0, fillLength) + str;
  20. }
  21. }
  22. // 其他更多是格式化有如下:
  23. function dataProcess(rawData) {
  24. if (typeof rawData !== 'string' || rawData.trim() === '') {
  25. console.error('dataProcess 函数错误:输入必须是非空字符串');
  26. throw new Error('无效的原始数据,需传入非空字符串格式的JSON数据');
  27. }
  28. // 1. 修复语法错误:逗号替换为冒号、去重重复的 measureId
  29. const cleanedData = rawData
  30. .replace(/"success",true/, '"success":true')
  31. .replace(/"cmdType","pulseResult"/, '"cmdType":"pulseResult"')
  32. // 修复2:去重重复的measureId(原始数据中重复出现,JSON不允许重复键,保留最后一个)
  33. .replace(/"measureId":"d5a615a6bab946429b4a4bd0a40bb253",/, '')
  34. // 可选修复:处理可能的多余逗号(部分场景下原始数据可能末尾多逗号,避免解析失败)
  35. .replace(/,\s*([}\]])/g, '$1');
  36. // 2. 第一次解析:获取外层 JSON 对象
  37. const outerData = JSON.parse(cleanedData);
  38. // 3. 第二次解析:处理嵌套的 pr 和 reportData(字符串转 JSON)
  39. // outerData.pr = JSON.parse(outerData.pr);
  40. // outerData.reportData = JSON.parse(outerData.reportData);
  41. return outerData;
  42. }
  43. export default dataProcess