2013-07-05 16 views
6

Nel mio codice JS, ho bisogno di convertire la risposta JSON dal server a un dizionario in modo che sia possibile accedervi per nome chiave. Ecco la situazione:JSON nel dizionario in JavaScript?

Dire, questa è la risposta JSON dal mio server:

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

Ora che cosa ho bisogno è quello di creare una variabile dizionario tale che la chiave è l'id e il valore è il (say) name in modo che possa accedere a loro variable.id o variable [id_value] (da un loop).

Come può essere raggiunto? Il tuo aiuto è molto apprezzato.

Grazie Vivek Ragunathan

risposta

11

si noti che questo non è JSON valida: è necessario utilizzare doppia -quotes, non virgolette.

si Supponendo rimediare, e che il JSON è già stato recuperato in una variabile stringa jsonResult, è necessario analizzare che per ottenere un oggetto utilizzando JSON.parse():

var result = JSON.parse(jsonResult); 

si può costruire un dizionario da 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" 

lei ha detto "e il valore è il nome (ad esempio)" - se non hai bisogno di valori department poi nel ciclo for sopra dicono employees[ emp.id ] = emp.name; e poi (ovviamente) employees[56] ti darebbe direttamente "Harry".

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

1

Si potrebbe scrivere una funzione javascript per ottenere un dipendente da id da un elenco di dipendenti:

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

    return null; 
} 

e quindi utilizzare questa funzione sulla risposta avete ottenuto dal server dopo parsing della stringa JSON indietro a un oggetto 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); 
} 
2

Beh, supponendo che il JSON è già stato analizzato per un Object:

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

È possibile ciclare su data.employees per costruire la "dizionario" (Object):

var employees = {}; 

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

Quindi, dato un employeeId:

var employee = employees[employeeId]; 
0

Qualcosa del genere consente di creare un dizionario in una linea, e specificare la chiave e il valore usato, o almeno la chiave in cui il valore diventa l'intero oggetto.

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; 
} 

Esempio di utilizzo:

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