JSON au dictionnaire en JavaScript?

Dans mon code JS, j'ai besoin de convertir la réponse JSON du serveur vers un dictionnaire afin que je puisse y accéder par des noms de clés. Voici la situation:

Dites, c'est la réponse JSON de mon serveur:

{ 'status': 'success', 'employees' : [ { 'id': 12, 'name': 'Tom', 'department': 'finance' }, { 'id': 34, 'name': 'Dick', 'department': 'admin' }, { 'id': 56, 'name': 'Harry', 'department': 'marketing' } ] } 

Maintenant, ce dont j'ai besoin, c'est de créer une variable de dictionnaire telle que la clé est l'identifiant et la valeur est le nom (par exemple) afin que je puisse y accéder variable.id ou variable [id_value] (à partir d'une boucle).

Comment cela peut il etre accompli? Votre aide est très appréciée.

Merci Vivek Ragunathan

Notez que ce n'est pas valable JSON: vous devez utiliser des guillemets doubles, pas des guillemets simples.

En supposant que vous corrigez cela, et que le JSON a déjà été récupéré dans une variable de chaîne jsonResult , vous devez analyser cela pour obtenir un objet en utilisant JSON.parse () :

 var result = JSON.parse(jsonResult); 

Vous pouvez créer un dictionnaire à partir de là:

 var employees = {}; for (var i = 0, emp; i < result.employees.length; i++) { emp = result.employees[i]; employees[ emp.id ] = emp; } console.log(employees[56].name); // logs "Harry" console.log(employees[56].department); // logs "marketing" 

Vous avez dit "et la valeur est le nom (par exemple)" – si vous n'avez pas besoin des valeurs du department puis dans la boucle for ci-dessus, dites les employees[ emp.id ] = emp.name; Et alors (évidemment) les employees[56] vous donneraient «Harry» directement.

Demo: http://jsfiddle.net/RnmFn/1/

Eh bien, en supposant que le JSON a déjà été analysé dans un Object :

 var data = JSON.parse('{"status":"success","employees":[{},{},{}]}'); // abridged 

Vous pouvez data.employees pour créer le " dictionnaire " ( Object ):

 var employees = {}; for (var i = 0; i < data.employees.length; i++) { employees[data.employees[i].id] = data.employees[i]; } 

Puis, donné un employeeId :

 var employee = employees[employeeId]; 

Vous pouvez écrire une fonction javascript pour obtenir un employé par identifiant d'une liste d'employés:

 function getEmployee(id, employees) { for (var i = 0; i < employees.length; i++) { var employee = employees[i]; if (employee.id === id) { return employee; } } return null; } 

Puis utilisez cette fonction sur la réponse que vous avez reçue du serveur après avoir analysé la chaîne JSON dans un objet javascript:

 var json = 'the JSON string you got from the server'; var obj = JSON.parse(json); var employees = obj.employees; var employee = getEmployee(34, employees); if (employee != null) { alert(employee.name); } 

Quelque chose comme cela vous permet de créer un dictionnaire en une seule ligne, et spécifiez la clé et la valeur utilisées, ou au moins la clé où la valeur devient l'objet entier.

 function toDictionary(items, key, value) { var dictionary = {}; if (items) { for (var i = 0; i < items.length; i++) { var item = items[i]; dictionary[key(item)] = value ? value(item) : item; } } return dictionary; } 

Exemple d'utilisation:

 var dictionary = toDictionary(result.employees, function (record) { return record.id; }); var employee = dictionary[34]; if (employee) { // do something with employee object }