关于读取json格式文件报错的问题,强转报错,.toString就不报错

游戏攻略04

关于读取json格式文件报错的问题,强转报错,.toString就不报错,第1张

关于读取json格式文件报错的问题,强转报错,.toString就不报错
导读:java是强类型语言,强转的前提是类型兼容 ,比如 子类转为父类,int和Intger 因此不是所有的类都可以转为String的toString()方法是 Ojbect中的方法,所有的对象都是Object的子类因此都可以调用toString

java是强类型语言,强转的前提是类型兼容 ,比如 子类转为父类,int和Intger

因此不是所有的类都可以转为String的

toString()方法是 Ojbect中的方法,所有的对象都是Object的子类因此都可以调用toString()方法,这被调用的toString()要么是类覆盖重写的要么是从父类继承来的toString方法。

今天遇到一个JSON数据转对象失败额问题,一开始服务返回的json就不是很干净,开头和结尾有换行符,明显不符合json格式用JSONparse肯定就报错啦

  

  这里告诉我们json的第一个位置的词不是所期望的。这时先用正则替换换行符

  chunk = chunkreplace(/[ ]/g, "")

  然后再打印一下前后数据观察

  一开始直接获取的数据,可以看到上下有好多空行

  正则替换过的数据,可以看到数据和我们常见的json格式一样了,但是转成对象时还是报错了,仍是一开始的错误提示Unexpected token in JSON at position 0

  

  然后又把这串字符串拿出来单独在node里和在浏览器里转,都成功了!what???遇见鬼了???

  深呼吸,冷静一下,那我们先做个长度打印,将替换完后的变量长度和直接将这段字符串的打印长度比较一下看看  

  我们肉眼看到的字符串的长度是896,但实际变量的长度确实897,看结合报错信息提示的是第一个字符异常,基本确定了源头是我们看不到的那第一个字符,那看下第一个字符是啥吧,

  consolelog('afterRepalce', chunk, chunklength, 'chunk[0]:', chunk[0]),打印出来看到第一个字符是空的,故此最后的原因还是返回的json数据不干净,多了空格,再加上去除空格的正则替换就可以了

  chunk = chunkreplace(/(^s)|(s$)/g, "")

  

  

  眼见不一定为实, 事实上没有那么多诡异的问题,仔细的分析目前掌握的信息,耐心的思考,交叉地校验信息,真相终归会浮出水面。

         let str = JSONstringify(arr)

         str = encodeURIComponent(str)

   <-------------------------------------------------->

         arr = JSONparse(decodeURIComponent(str))        // 再还原

《=====================================================》

JSONstringify() : 用于将 JavaScript 值转换为 JSON 字符串;

JSONparse() :用于将一个 JSON 字符串转换为对象;

encodeURIComponent() :可把字符串作为 URI 组件进行编码,该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ ! ~ ' ( ) ,其他字符(比如 :;/:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的(链接:https://wwwrunoobcom/js/javascript-json-stringifyhtml);

decodeURIComponent() :可对 encodeURIComponent() 函数编码的 URI 进行解码(链接:https://wwwrunoobcom/jsref/jsref-decodeuricomponenthtml)。