最近在uniapp
中遇到了一个bug,排查后是json解析的问题。对uniapp
开发比较熟悉的,应该会知道uni.navigateTo
这个API方法。这是官方提供用于跳转页面的方法。
有时候我们在跳转页面时会想传递一些参数,通常采用这样的方式
navigateTo(url, row) {
uni.navigateTo({
url: `/pages/profess/equipment/maintenance/${url}?row=` + JSON.stringify(row)
});
},
将数据通过JSON.stringify
方法将对象转成字符串,拼接到地址后面。
onLoad(e) {
let row = JSON.parse(e.row);
},
然后在跳转到的页面里的生命周期函数onLoad
里获取到这个数据。
问题
如果json
字符串是标准格式,那一点问题都没有。但是如果格式不正确,后面的逻辑将都无法执行。JSON.parse
对一些不标准的数据是无法解析的,比如:
onst json1 = '{\n\t"foo": true,\n}';
简化一下:
const json2 = '{"foo": true,}';
根本原因是最后面多了一个逗号,导致json
解析失败了,JSON.parse
真的很有局限。
。
当然实际的测试数据比上面这个复杂多了,是这样的,导致根本解析不出来
解决
当然github上的大神还是非常多的,找到了一个现成的库 https://github.com/RyanMarcus/dirty-json
这是用于处理不符合或无效JSON的JSON解析器,对于大多数情况是没问题,我上面那个这么复杂的数据也处理好了
使用
npm install dirty-json
import dJSON from 'dirty-json'
const json1 = '{\n\t"foo": true,\n}';
const json2 = '{"foo": true,}';
//console.log(parseJson(json))
console.log("json解析:",dJSON.parse(json1),dJSON.parse(json2))