246 votes

Chaine en objet 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 ?

201voto

matejkramny Points 1853

En fait, la meilleure solution consiste à utiliser JSON :

Documentation

JSON.parse(text[, reviver]);

Exemples :

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();

93voto

Philippe Leybaert Points 62715

Votre chaîne ressemble à une chaîne JSON sans les accolades.

Cela devrait fonctionner alors :

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

63voto

cdleary Points 18869

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.

47voto

Wianto Wie Points 109

Cette méthode simple...

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

sortie

name1

24voto

Faisal Chishti Points 221

É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.com

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.

Powered by:

X