Dans mon code JS, je dois convertir la réponse JSON du serveur en dictionnaire afin de pouvoir y accéder par noms de clé. Voici la situation:
Voici 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é soit l'id et que la valeur soit le (dis) nom 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 a grandement apprécié.
Merci Vivek Ragunathan
Notez que ce n'est pas un JSON valide: vous devez utiliser des guillemets doubles, pas des guillemets simples.
En supposant que vous corrigiez cela et que le JSON ait déjà été récupéré dans une variable chaîne jsonResult
, vous devez analyser cela pour obtenir un objet avec JSON.parse () :
var result = JSON.parse(jsonResult);
Vous pouvez construire 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 (dire) nom" - si vous n'avez pas besoin des valeurs department
, dans la boucle for ci-dessus, dites employees[ emp.id ] = emp.name;
puis (évidemment) employees[56]
vous donnerait directement "Harry".
Eh bien, en supposant que le JSON a déjà été analysé en une Object
:
var data = JSON.parse('{"status":"success","employees":[{},{},{}]}'); // abridged
Vous pouvez faire une boucle sur data.employees
pour construire le " dictionary " (Object
):
var employees = {};
for (var i = 0; i < data.employees.length; i++) {
employees[data.employees[i].id] = data.employees[i];
}
Puis, étant donné une employeeId
:
var employee = employees[employeeId];
Vous pouvez écrire une fonction javascript pour obtenir un employé par identifiant à partir 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 obtenue du serveur après l'analyse de la chaîne JSON en 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 sur une ligne et de spécifier 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
}