从字符串声明对象

时间:2016-07-05 02:39:48

标签: javascript

我想声明一个javascript对象,它的属性是从之前创建的一个序列生成的 例如:



var x = '"property1": "abc",
         "property2": "def",
         "property3": "xyz",
        ';
var obj = {  
  // insert content of x here
}         




我能做什么?

4 个答案:

答案 0 :(得分:0)

在这里使用JSON字符串

var x = `{"property1": "abc",
         "property2": "def",
         "property3": "xyz"
        }`;
var obj = JSON.parse(x)

阅读完评论后,我认为你可能会在括号表示法之后。

您可以通过点符号

访问对象的属性
obj.prop = foo;
var v = obj.prop;

或者您可以使用括号表示法

var propName = "prop"
obj[propName] = foo;
var v = obj[propName];

请注意,这不是访问数组。

所以你可以这样做

var data = [["property1", "abc"],["property2","def"],["property3","xyz"]]
var obj = {};
data.forEach(pk => { obj[pk[0]] = pk[1]; });
console.log(obj.property1); // output "abc"

答案 1 :(得分:0)

您可以声明

var x = {property1: "abc",
         property2: "def",
         property3: "xyz"};
var obj = {  
    data:x
}   

答案 2 :(得分:0)

假设您的字符串是双引号的有效键/值对序列,那么您可以通过连接'{''}'之后的轻松地将其转换为JSON / em>删除任何尾随逗号(我注意到你的上一个属性有一个尾随逗号)。然后,您可以通过解析该JSON来创建对象。所以:

var x = // Your string of quoted, comma-separated key/value pairs here

var obj = JSON.parse('{' + x.replace(/,\s+$/,'') + '}');

不赞成的一般注意事项:我不知道你为什么要将属性创建为字符串而不是直接向对象添加属性,一般情况下你不应该手工创建JSON,我想请注意,单引号括起来的字符串文字不能包含换行符,所以我希望你只是为了便于阅读而显示它。

答案 3 :(得分:0)

您也可以使用eval API来解析字符串。

请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

  

eval()函数评估表示为字符串的JavaScript代码。

示例:

let y = "";
let x = ' "property1": "abc", "property2": "def", "property3": "xyz" ';
eval('y={' + x + '}');

<强>输出:

enter image description here

请注意,使用eval可能会有危险,如文档中所述:

  

eval()是一个危险函数,它执行它传递的代码   具有来电者的特权。如果使用字符串运行eval()   可能会受到恶意方的影响,您最终可能会运行   具有您的权限的用户计算机上的恶意代码   网页/扩展名。

示例:将其公开为REST服务,以允许最终用户使用任何&#39;对象字符串&#39;这可能是一段恶意代码 - 比如下载病毒。