通过eval转化标准json对象

当我们拿到一个不标准的json数据怎么处理呢,比如这种{a:'zhangsan',b:'lisi'}这种非人类的json格式如何处理才好呢。恩,首先我们想到的就是将其转化为标准的json格式,怎么转化呢。然后又想到通过正则表达式去替换其中的键值,将其都加上双引号,这不就变成了标准的json格式了么,恩,对的,通过这种方式是可以的,比如str.replace(/(\s*?{\s*?|\s*?,\s*?)(['"])?([\w_]+)(['"])?:/g, '$1"$3":');这样就把键值会加上双引号,但是这也会留下问题,比如当其键或是值中有冒号存在怎么办,这又是json的界限符,这就很难去处理了。

但是我们的js中好在还有一个JSON.parse 跟JSON.stringify这两个方法可以来使用,恩,的确可以,但是我们在使用stringify方法时结果却是一个字符串,恩,对的,实际上的结果也是个字符串,但是我们要的结果是json字符串,其实stringify方法需要传递的是一个json对象,并不是一个字符串,若传递的是一个字符串,则返回的也是一个字符串,而不是json字符串,所以我们需要将字符串转化一下,我们可以通过eval方法来转化成标准的json再通过stringify转化成json字符串再通过parse转化成json对象,恩,有点儿小复杂,不过的确是能达到效果了。当然首先是你的信任eval执行的字符串,顺便说下,eval执行的字符串时{}会当做是一个语法块来执行,所以我们还需要在执行{}对象时外边加上()小括号,这样就能当做是一个能执行的语法块了。这样就能将不标准的json转化为标准的json对象啦。

一般在使用eval执行的时候,一定要加上小括号。

百度未收录
分享