如何从包含初始化程序的字符串创建对象

时间:2014-08-23 19:29:46

标签: javascript

我正在从数据库中读取对象初始化程序字符串,但却看不到任何简单的方法将它们转换回对象。

例如,给定以下字符串,您将如何将其转换为对象?

var initializer = "{type: car, colour: red, engine: 2.0L}";

我最后通过逐个循环来解码它们,但觉得必须有更好的方法。

2 个答案:

答案 0 :(得分:0)

在不太可能的情况下,您不应该按照自己的意愿从服务器返回JSON,而是自己最终解析这个,这里有你如何做到这一点:

initializer
  .replace(/^\{|\}$/g, '')            // remove {} at beginning and end
  .split(',')                         // break apart into key: val pairs
  .reduce(function(result, keyval) {  // build object 
    var parts = keyval.split(':').map(''.trim);
    result[parts[0]] = parts[1];
    return result;
  }, {});

当然,您可能想要为此添加一堆防弹。

如果您正在使用Underscore,您可以使用它从[key,val]对数组创建对象的能力:

_.object(initializer
  .replace((/^\{|\}$/g, '')
  .split(',')
  .map(function(keyval) {
    return keyval.split(':').map(''.trim);
  })
);

答案 1 :(得分:0)

由于您的数据未被引用,因此数据类型之间没有区别,所有内容都必须解析为字符串。

我会尝试先创建有效的可解析数据,而不是尝试解析这个问题。