转换非标准json/对象字符串为标准字符串?
字符串:
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;} 值为方法,加双引号
现在的问题就变成了怎么根据逗号分割出最外层数据?
回复
1个回答
test
2024-07-10
刚看问题描述没看懂要干什么,看了评论大概猜测是想实现微信小程序里动态下发js代码。
https://developers.weixin.qq....
微信官方发现一个就会下架一个。如果只是单纯想研究技术实现,上面的链接里给出的“违规”库如estime等应该就是你要的
本质上是一个编译原理的范畴,如果需求比较简单的话,可以自己设计一个DSL来更新一些简单的逻辑
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容