问题
今天遇到一个困扰我一晚上的问题,我偷懒将一个 JSON 文件 stringify 后存到 MySQL,然后又通过接口将 JSON 字符串取出。结果报 JSON 解析异常。数据格式类似下面这种:
"{\"申请人\":\"夏天\",\"核报金额\":\"5,817.00\"}"
解析报错信息:Uncaught SyntaxError: Unexpected token u in JSON at position 1000
尝试解决
其中一个问题是我有一个超长的 JSON 没有在 SQL 中存完整,被截断了。于是将这个字段改为 VARCHAR(5000).
一开始我在想从 JSON.parse() 解析的字符串入手,在解析前自己处理一波。但看着数据库里上千条数据,打出了 GG。
那么从 MySQL 入手呢?我发现 MySQL 5.7 之后开始支持 JSON 数据类型了,然后兴冲冲的去看我的数据库版本,5.5……芭比Q!
那么只能从源头 JSON.stringify() 入手了,如何让格式化的正常些呢?
网上找了一种邪门的方法
let sence = 'id:1,name:张三'
let obj = ( Function( "return " + sence ) )()
console.log(JSON.stringify(obj))
this.id = obj.id
并!不!靠!谱!
最终解决方案
后来我就想,既然 JSON.stringify() 函数这么不靠谱,那有没有第三方库的更优解决方案呢?
于是我去 NPM 查询了关键字 json stringify
果然找到了一些工具,我使用的是 json-stable-stringify,下面是应用代码:
const stringify = require("json-stable-stringify");
const str = stringify(data.extra)
JSON.parse(str)
使用后的结果:
{"申请人":"夏天","核报金额":"5,817.00"}
完美解决!
JSON 的解析
其实不止是 JSON.stringify() 函数,JSON 的解析函数也有缺陷,那就是不好定位问题,好在也有类似的第三方库来解决。parse-json 可以在解析 json 的同时更友好的提示 JSON 错误。
网友评论