NetSuite RESTlet返回的SQL错误JSON序列化无效问题求助
NetSuite RESTlet返回的SQL错误JSON序列化无效问题求助
我在给NetSuite做集成开发时用到了RESTlet,这个RESTlet本身运行正常,核心逻辑是基于SuiteQL(本质就是SQL)实现的。但我在调试SQL代码、迭代更新的时候难免会写出语法错误,这时候RESTlet里的JavaScript代码就会抛出SQL语法异常。
本来NetSuite会把捕获到的异常转换成JSON格式的响应体,这功能本身是很实用的,但不知道出于什么原因,它会把错误信息里的单引号转成\'的格式——问题是标准JSON根本不允许用反斜杠转义单引号啊!这种写法在JavaScript里是合法的,但完全不符合JSON规范!
给大家看一个我构造的错误响应文本示例(真实返回的格式和这个一致):
{ "error": { "message": "Failed to parse SQL [ SELECT \'Hello World\' FROM NOTHING ]" }
里面的\'直接导致Node.js里的标准JSON解析器报错,因为这不是合法的JSON格式。
我现在临时用了个hack方案来绕开这个问题:在客户端代码里加了双层解析兜底,先尝试正常解析,失败就把那些错误的转义字符去掉再试,代码如下:
let responseObject; try { responseObject = JSON.parse(responseText); } catch (e) { try { responseObject = JSON.parse(responseText.replace(/\\'/g, "'")); } catch (ee) { // 这里做日志记录、重新抛出错误等处理逻辑 } }
但这个方案感觉特别笨拙,完全是治标不治本。
我怀疑NetSuite本身应该有某种配置或者方法,能让它停止这种错误的转义处理?真心希望能从根源解决这个问题,而不是一直依赖这种hack。有没有大佬遇到过同样的问题,或者知道怎么让NetSuite返回符合标准的JSON错误响应?
内容来源于stack exchange
相关产品推荐
相关产品推荐

