执行 json 中的 “函数”

Posted auserroot

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了执行 json 中的 “函数”相关的知识,希望对你有一定的参考价值。

JSON

MDN中关于JSON方法 stringify 和 parse 的转换解析类型有明确的说明 :

undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略
(出现在非数组对象的属性值中时)或者被转换成 null(出现在数组中时)。
函数、undefined 被单独转换时,会返回 undefined,
如JSON.stringify(function()) or JSON.stringify(undefined).

这条说明 一个内部存在 函数的 Object 通过 JSON.stringify转换成String 后会忽略 内部函数
那么要在JSON中保存函数该怎么操作呢?
答案也很简单 直接将 函数 以 String 类型 在JSON中保存即可
那么保存后的String 类型的函数如何取用呢?
取用方式如下:

//示例 json
let json = 
  "aa":"(a,b)=>const c = a+b ; console.log(c)"//函数体内用 ;隔开语句


//封装方法重新构造函数
const _func = (fun) =>
  //函数简单判断
if(!fun.includes('(')&&!fun.includes(')')&&!fun.includes('=>')&&!fun.includes('')&&!fun.includes('')||!fun.includes('function'))
    return
  
  //截取参数 
  //方法一: split
  let arg = fun.split('(')[1].split(')')[0].split(',')//此时拿到的 arguments 是一个数组
  //方法二:slice + indexOf + split
  let arg = fun.slice(fun.indexOf('(')+1,fun.indexOf(')')).split(',')
  //  console.log(arg)
  
  //函数体截取
  //方法一:split
  let f = fun.split('')[1].split('')[0] //函数体
  //方法二:slice + indexOf
  let f = fun.slice(fun.indexOf('')+1,fun.indexOf(''))
  //  console.log(f)
	
	//上述方法二选一即可
   return new Function(...arg,f) //返回一个组装好的新函数

console.log(json.aa) //(a,b)=>const c = a+b ; console.log(c)

//调用方法
_func(json.aa)(1,2) //3 

以上是关于执行 json 中的 “函数”的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式用于在不被单引号或双引号包围时使用空格分割字符串

springmvc接收json注意事项

springmvc接收json注意事项

VS 代码执行不同于代码文件

如何从 C# 中的 Azure 函数在设备中执行方法?

一次仅访问一个可执行文件以访问 .so 库中的函数