我有一个字符串
string = "firstName:name1, lastName:last1";
现在我需要一个对象 obj 这样
obj = {firstName:name1, lastName:last1}
我怎样才能在 JS 中做到这一点?
我有一个字符串
string = "firstName:name1, lastName:last1";
现在我需要一个对象 obj 这样
obj = {firstName:name1, lastName:last1}
我怎样才能在 JS 中做到这一点?
实际上,最好的解决方案是使用 JSON:
JSON.parse(text[, reviver]);
1)
var myobj = JSON.parse('{ "hello":"world" }');
alert(myobj.hello); // 'world'
2)
var myobj = JSON.parse(JSON.stringify({
hello: "world"
});
alert(myobj.hello); // 'world'
3) 将函数传递给 JSON
var obj = {
hello: "World",
sayHello: (function() {
console.log("I say Hello!");
}).toString()
};
var myobj = JSON.parse(JSON.stringify(obj));
myobj.sayHello = new Function("return ("+myobj.sayHello+")")();
myobj.sayHello();
您的字符串看起来像一个没有花括号的 JSON 字符串。
这应该可以工作:
obj = eval('({' + str + '})');
如果我理解正确:
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
由于 JSON.parse() 方法需要将 Object 键括在引号内才能正常工作,因此在调用 JSON.parse() 方法之前,我们首先必须将字符串转换为 JSON 格式的字符串。
var obj = '{ firstName:"John", lastName:"Doe" }';
var jsonStr = obj.replace(/(\w+:)|(\w+ :)/g, function(matchedStr) {
return '"' + matchedStr.substring(0, matchedStr.length - 1) + '":';
});
obj = JSON.parse(jsonStr); //converts to a regular object
console.log(obj.firstName); // expected output: John
console.log(obj.lastName); // expected output: Doe
即使字符串具有复杂对象(如下所示),这也会起作用,并且它仍然可以正确转换。只需确保字符串本身包含在单引号内。
var strObj = '{ name:"John Doe", age:33, favorites:{ sports:["hoops", "baseball"], movies:["star wars", "taxi driver"] }}';
var jsonStr = strObj.replace(/(\w+:)|(\w+ :)/g, function(s) {
return '"' + s.substring(0, s.length-1) + '":';
});
var obj = JSON.parse(jsonStr);
console.log(obj.favorites.movies[0]); // expected output: star wars