我有一个字符串as

string = "firstName:name1, lastName:last1"; 

现在我需要一个对象obj这样

obj = {firstName:name1, lastName:last1}

我如何在JS中做到这一点?


当前回答

我使用的是JSON5,它工作得非常好。

好的部分是它不包含eval和new Function,使用起来非常安全。

其他回答

在你的情况下

var KeyVal = string.split(", ");
var obj = {};
var i;
for (i in KeyVal) {
    KeyVal[i] = KeyVal[i].split(":");
    obj[eval(KeyVal[i][0])] = eval(KeyVal[i][1]);
}

你的字符串看起来像一个没有花括号的JSON字符串。

这应该工作,然后:

obj = eval('({' + str + '})');

警告:这会引入重大的安全漏洞,例如使用不受信任的数据(应用程序用户输入的数据)进行XSS。

如果我没理解错的话:

var properties = string.split(', ');
var obj = {};
properties.forEach(function(property) {
    var tup = property.split(':');
    obj[tup[0]] = tup[1];
});

我假设属性名在冒号的左边,它所取的字符串值在右边。

注意Array。forEach是JavaScript 1.6——您可能需要使用工具包来实现最大的兼容性。

这个简单的方法…

var string = "{firstName:'name1', lastName:'last1'}";
eval('var obj='+string);
alert(obj.firstName);

输出

name1
string = "firstName:name1, lastName:last1";

这是可行的:

var fields = string.split(', '),
    fieldObject = {};

if( typeof fields === 'object') ){
   fields.each(function(field) {
      var c = property.split(':');
      fieldObject[c[0]] = c[1];
   });
}

然而,这并不是有效的。当你有这样的东西时会发生什么:

string = "firstName:name1, lastName:last1, profileUrl:http://localhost/site/profile/1";

Split()将拆分'http'。所以我建议您使用一个特殊的分隔符,如pipe

 string = "firstName|name1, lastName|last1";


   var fields = string.split(', '),
        fieldObject = {};

    if( typeof fields === 'object') ){
       fields.each(function(field) {
          var c = property.split('|');
          fieldObject[c[0]] = c[1];
       });
    }