我有我需要通过结合解析字符串转换成JS对象的情况下,这个象下面这样:
var jsString = '{"name" : this.name, "age": this.age}';
this.name = "Hello";
this.age = 100;
//This fails(CASE 1)
var jsObjectFromString = JSON.parse(jsString);
console.log(jsObjectFromString );
//This works(CASE 2)
var directObject = {"name" : this.name, "age": this.age};
console.log(directObject);
//Need below output for console.log(jsObjectFromString ):
//{"name" : "Hello", "age": 100}
在我的实际程序中,字符串来自网络服务,因此我不能使用 CASE 2 方法。
我可以在解析后遍历 JS 对象并设置参数,如下所示:
var jsonString = '{"name" : "", "age": 0}';
var jsonObject = JSON.parse(jsonString);
jsonObject["name"] = this.name;
jsonObject["age"] = this.age;
但是有很多内部对象和遍历将是一种杀戮。我尝试了以下但失败了(显然:():
JSON.parse(jsonString).bind(this);
有没有办法克服这个问题?
PS:这是一个基于浏览器的应用程序,而不是一个节点项目。
编辑:我想从字符串构造一个 javascript 对象。我想将字符串的一部分(如名称、年龄)替换为解析的 Javascript 对象中的实际值。
这是一个非常奇怪的用例,我确信您的应用程序的设计应该改变。但这里是基于允许的属性白名单和“this”特定角色的协议的解决方案。初始字符串中的子字符串:
let income = '{"name" : this.name, "age": this.age}';
this.name = "Hello";
this.age = 100;
const whiteList = ['name', 'age'];
const inject = (prop) => {
if(typeof this[prop] === 'string') {
return '"' + this[prop] + '"';
}
return this[prop];
};
whiteList.forEach(prop => income = income.replace('this.' + prop, inject(prop)));
console.log(income); // {"name" : "Hello", "age": 100}
您可以通过以下方式升级程序
': this.'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句