字符串:
let str = '{ "key1": 1, key2 : {aa:1, bb:{}}, key3:a,key4:[1,2], key5:function(){return 1;}, key6:()=>{return 2;} }';
转化结果:
如上,我有一个非标准的json字符串(不换行),里面每个键的值可能是字母、数字、对象、函数,在不能使用eval和new Function的前提下,请问怎么转换为对象(如图所示),最好是函数是function还是箭头函数也能区分。
我初步想法是先转化为标准json对象
变成:'{ "key1": 1, "key2" : {"aa":1, "bb":{}}, "key3":"v","key4":[1,2], "key5":"function(){return 1;}", "key6":"()=>{return 2;}" }';
再JSON.parse
第一步:先提取出第一层数据,第二步:按冒号分割键和值,第三步:根据值的类型做不同处理
"key1": 1 值为数字,不处理
key2 : {aa:1,bb:{}} 值为对象,继续第一步
key3:a 值为字母,加引号
key4:[1,2] 值为数组,继续第一步
key5:function(){return 1;} 值为方法,加双引号
key6:()=>{return 2;} 值为方法,加双引号
现在的问题就变成了怎么根据逗号分割出最外层数据?
刚看问题描述没看懂要干什么,看了评论大概猜测是想实现微信小程序里动态下发js代码。
https://developers.weixin.qq....
微信官方发现一个就会下架一个。
如果只是单纯想研究技术实现,上面的链接里给出的“违规”库如estime等应该就是你要的
本质上是一个编译原理的范畴,如果需求比较简单的话,可以自己设计一个DSL来更新一些简单的逻辑