年终总结ppt模板免费下载网站,网站模板目录扫描,云商城是什么平台,当涂 微网站开发公司问题背景
这个报错发生在之前部署的一个前后端分离的项目中。后端使用的Spring Boot#xff0c;前端使用的JavaScript#xff0c;前后端交互使用Thymeleaf框架。
现象
项目组的另一个小伙伴说#xff0c;突然有个页面打不开了#xff0c;整个页面全空白。我F12打开浏览器…问题背景
这个报错发生在之前部署的一个前后端分离的项目中。后端使用的Spring Boot前端使用的JavaScript前后端交互使用Thymeleaf框架。
现象
项目组的另一个小伙伴说突然有个页面打不开了整个页面全空白。我F12打开浏览器发现有如下报错 问题排查
首先我打开了JavaScript的代码部分发现报错的是这一行 这里初步就能判断可能是数据文件P.s. 这是一个txt文件里面存放的是JSON格式的数据的问题了。数据文件可能有些字符串是JavaScript语言的JSON库解析不了的这个数据文件是一个Python程序生成的。于是我又看了看数据发现里面有NaN 之前我是不知道JSON有哪些是不合法字符的。所以我就查了一下JSON的官方规范文档The JavaScript Object Notation (JSON) Data Interchange Format。其中对于Values的描述如下 所以问题的原因很明显了txt数据文件中有NaN导致JavaScript的JSON库无法对其解析。
Bug复现
为了进一步证明我对于这个问题的原因的猜想是正确的我尝试复现了这个bug。我在本地用JavaScript、Python两种语言的JSON解析库分别对同一个含有NaN的txt数据文件进行解析。由于我最近一直在写Python所以先用的Python复现再用的JavaScript复现的。
数据文件data.txt如下
{key: [40.5,NaN]
}按照JSON规范文档来看这不是一个合法的JSON数据。
Python解析结果如下
{key: [40.5, nan]}JavaScript解析结果如下
Error parsing JSON: SyntaxError: Unexpected token N in JSON at position 30at JSON.parse (anonymous)可以看得出来JavaScript对这种文件的解析确实会报错。而Python居然是不报错的说明不同语言的JSON解析库的实现差异还挺大的Python的JSON解析库对于这种不符合JSON规范的不合法字符也能解析。
这里也吸取了一个教训在复现的时候一定要保证复现的环境和出现Bug的环境一模一样不然就会出现我这种换了个语言又能解析的情况。。。
解决方案
在Python程序生成数据NaN的数据后可以将其替换成其他合法的JSON字符串。
总结
JSON数据中不是所有字符都是合法的具体参见JSON官方规范文档The JavaScript Object Notation (JSON) Data Interchange Format保存任何格式的数据文件时候尽量保证不要出现该格式文件规范中不合法的字符除非所有语言都实现了对于这种格式的不合法字符的解析但这显然不太可能复现Bug的时候一定要保证复现环境和出现Bug的环境一模一样包括语言、第三方库的版本等等