美文网首页
JSON stringify 后存入 SQL 的字符串无法解析

JSON stringify 后存入 SQL 的字符串无法解析

作者: VioletJack | 来源:发表于2023-02-11 08:33 被阅读0次

问题

今天遇到一个困扰我一晚上的问题,我偷懒将一个 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 错误。

相关文章

网友评论

      本文标题:JSON stringify 后存入 SQL 的字符串无法解析

      本文链接:https://www.haomeiwen.com/subject/mphkkdtx.html