J'ai une chaîne de caractères comme
string = "firstName:name1, lastName:last1";
maintenant j'ai besoin d'un objet obj tel que
obj = {firstName:name1, lastName:last1}
Comment puis-je faire cela en JS ?
J'ai une chaîne de caractères comme
string = "firstName:name1, lastName:last1";
maintenant j'ai besoin d'un objet obj tel que
obj = {firstName:name1, lastName:last1}
Comment puis-je faire cela en JS ?
En fait, la meilleure solution consiste à utiliser 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) Passage d'une fonction à 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();
Si je comprends bien :
var properties = string.split(', ');
var obj = {};
properties.forEach(function(property) {
var tup = property.split(':');
obj[tup[0]] = tup[1];
});
Je suppose que le nom de la propriété se trouve à gauche des deux points et que la valeur de la chaîne qu'elle prend en charge se trouve à droite.
Notez que Array.forEach
est JavaScript 1.6 -- vous pouvez vouloir utiliser une boîte à outils pour une compatibilité maximale.
Étant donné que la méthode JSON.parse() exige que les clés des objets soient placées entre guillemets pour fonctionner correctement, nous devons d'abord convertir la chaîne en une chaîne formatée JSON avant d'appeler la méthode JSON.parse().
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
Cela fonctionnerait même si la chaîne a un objet complexe (comme dans l'exemple suivant) et la conversion serait toujours correcte. Assurez-vous simplement que la chaîne de caractères elle-même est placée entre guillemets simples.
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
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.