我有一些字符串格式如下:
'{key1=value1, key2=value2}'
将使用此格式的字符串转换为JavaScript对象的最佳方法是什么?
谢谢!
答案 0 :(得分:3)
你几乎可以解析JSON:
JSON.parse('{key1=value1, key2=value2}'.replace(/=/g,":"))
编辑将键作为字符串(thx @MattGreer):
JSON.parse('{key1=value1, key2=value2}'.replace(/(\w+)=/g, '"$1":'))
编辑将值作为字符串(thx @ajsie):
JSON.parse('{key1=value1, key2=value2}'.replace(/(\w+)=(\w+)/g, '"$1":"$2"'))
答案 1 :(得分:1)
这可行。虽然没经过测试。
var data = '{key1=value1, key2=value2}',
values = data.match(/\w+=\w+/g),
newObject = {},
i, value;
for (i=0; i < values.length; i++) {
value = values[i].split('=');
newObject[value[0]] = value[1] ;
};
答案 2 :(得分:0)
在这种格式中,没有任何内置功能可以帮助您。这不是一个有效的对象文字,因此eval
将失败(无论如何应该避免使用eval),并且它不是一个JSON字符串,因此JSON.parse
也会失败。你能按摩格式吗?如果你能得到它{"key1": value1, "key2": value2 }
,那么我提到的两件事都可以开箱即用。 JSON.parse
尤其会很好:
var resultingObject = JSON.parse('{"key1": value1, "key2": value2 }')
将数据按到有效的JSON格式(可能)比尝试编写自己的解析器更容易。但是如果您对格式没有选择,那么解析器可能是您唯一的选择。
绝望中,通过暴力将格式转换为JSON的粗略函数(将所有'='替换为':',将引号中的键包裹起来,可能通过正则表达式)都可以,但它会很脆弱。
答案 3 :(得分:0)
如果值是数字,而不是字符串,并且信息来自可靠来源,那么您只需eval
字符串。
如果值可以包含字符串,那么您需要解析它。
补充:oops,我忘了键/值分隔符是冒号,而不是等号。 @sinsedrix解决方案很好,除了你需要评估它,因为它仍然是无效的JSON。 (JSON要求键是字符串,而不是裸字。)