执行 json 中的 “函数”

1 篇文章 0 订阅

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 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle JSON解析函数是一组用于处理JSON数据的内置函数。这些函数允许我们从JSON对象提取数据,进行过滤、转换和操作。 首先,我们可以使用JSON_VALUE函数JSON对象提取指定键的值。例如,JSON_VALUE('{"name":"John", "age":30}', '$.name')将返回"John"。此函数还支持通过路径表达式访问嵌套的JSON键。 其次,我们可以使用JSON_QUERY函数执行更复杂的查询和过滤。该函数可以使用SQL-JSON路径表达式定位和提取满足条件的JSON键值对。例如,JSON_QUERY('{"name":"John", "age":30}', '$.name')将返回一个JSON对象{"name":"John"}。 此外,我们可以使用JSON_OBJECT函数将查询结果合并为一个JSON对象。该函数接受键值对作为参数,并返回一个JSON对象。例如,JSON_OBJECT('name' VALUE 'John', 'age' VALUE 30)将返回一个{"name":"John", "age":30}的JSON对象。 最后,我们还可以使用JSON_TABLE函数JSON数据转换为关系表格形式,以便进行查询和分析。JSON_TABLE函数接受JSON对象和查询条件作为参数,并返回一个包含解析后数据的虚拟表。通过这个虚拟表,我们可以使用传统的SQL查询语言来对数据进行操作。 综上所述,Oracle的JSON解析函数提供了丰富的功能,使我们能够在Oracle数据库处理和操作JSON数据。无论是提取特定的JSON值,还是进行复杂的查询和转换,这些函数都为我们的工作提供了便利和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值