今天遇到一个JSON数据转对象失败额问题,一开始服务返回的json就不是很干净,开头和结尾有换行符,明显不符合json格式用JSON.parse肯定就报错啦
这里告诉我们json的第一个位置的词不是所期望的。这时先用正则替换换行符
chunk = chunk.replace(/[
]/g, "")
然后再打印一下前后数据观察
一开始直接获取的数据,可以看到上下有好多空行
正则替换过的数据,可以看到数据和我们常见的json格式一样了,但是转成对象时还是报错了,仍是一开始的错误提示Unexpected token in JSON at position 0
然后又把这串字符串拿出来单独在node里和在浏览器里转,都成功了!what???遇见鬼了???
深呼吸,冷静一下,那我们先做个长度打印,将替换完后的变量长度和直接将这段字符串的打印长度比较一下看看
我们肉眼看到的字符串的长度是896,但实际变量的长度确实897,看结合报错信息提示的是第一个字符异常,基本确定了源头是我们看不到的那第一个字符,那看下第一个字符是啥吧,
console.log('afterRepalce', chunk, chunk.length, 'chunk[0]:', chunk[0]),打印出来看到第一个字符是空的,故此最后的原因还是返回的json数据不干净,多了空格,再加上去除空格的正则替换就可以了
chunk = chunk.replace(/(^s*)|(s*$)/g, "")
眼见不一定为实, 事实上没有那么多诡异的问题,仔细的分析目前掌握的信息,耐心的思考,交叉地校验信息,真相终归会浮出水面。