JSON内容实现变量映射

501 阅读1分钟

一、在工作中遇到了一个问题——一个储存数据的JSON文本,如何依据接口的数据来实现数据的自我更新?

举例:

// 这个是真实的数据
const data = {
  name: 'haha',
  age: 6,
  data: [12, 13, 14, 15]
}
// 这个是JSON的文本内容
{
  "name":"name",
  "age":"age",
  "data":"data"
}

二、最后我也没找到JSON文本识别变量的可能,换用了另一种方式:把JSON改写成字符串,将字符串作为函数内部的代码来执行,识别函数的参数来匹配变量,最终将匹配的结果return。

代码如下:

let jsonStr = 'let option = {\n  "name":data.name,\n  "age":data.age,\n "data":data.data\n}' //将jsonStr改写成这样,如果在项目中使用,建议在全局环境下设置前缀,这里的前缀是"let option =" 
 
const data = {
  name: 'haha',
  age: 6,
  data: [12, 13, 14, 15]
}
 
function strMapping(string, data) {
  string = string + '; return option;' // 匹配后的新option作为函数结果返回
  return new Function('data', string)(data)//详见new Function文档
}
console.log(strMapping(jsonStr, data))
// 结果:{ name: 'haha', age: 6, data: [ 12, 13, 14, 15 ] }

这里还有个问题就是:怎么快速将JSON文件改写成想要的字符串代码?本人是刚好项目中用到了monaco编辑器,很方便地获取到字符串格式的值。但如果想要更加灵活地替换,建议自己写一个转换函数。