2013-07-05 15 views
6

In meinem JS-Code muss ich die JSON-Antwort vom Server in ein Wörterbuch konvertieren, damit ich über Schlüsselnamen darauf zugreifen kann. Hier ist die Situation:JSON zum Wörterbuch in JavaScript?

sagen, das ist die JSON-Antwort von meinem Server:

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

Nun, was ich brauche ein Wörterbuch Variable zu erstellen ist so, dass der Schlüssel ist die ID und der Wert der (sag) name, damit ich auf sie zugreifen kann variable.id oder variable [id_value] (aus einer Schleife).

Wie kann dies erreicht werden? Ihre Hilfe wird sehr geschätzt.

Dank Vivek Ragunathan

Antwort

11

Beachten Sie, dass das nicht gültig JSON ist: Sie haben doppelt zu verwenden -quotes, keine einfachen Anführungszeichen.

Sie Angenommen beheben, dass, und dass die JSON bereits in eine String-Variable jsonResult abgerufen worden ist, müssen Sie das analysieren, um ein Objekt zu erhalten, mit JSON.parse():

var result = JSON.parse(jsonResult); 

Sie ein Wörterbuch von dort bauen können:

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" 

sagte You „und der Wert der (sagen wir) Name“ - wenn man dann die department Werte brauchen nicht in der for-Schleife über employees[ emp.id ] = emp.name; sagen und dann (natürlich) employees[56] würde dir "Harry" direkt geben.

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

1

Sie könnten eine JavaScript-Funktion schreiben einen Mitarbeiter von id aus einer Liste von Mitarbeitern zu erhalten:

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

    return null; 
} 

und dann mit dieser Funktion auf der Antwort, die Sie vom Server bekamen nachdem das JSON-String zurück zu einem Javascript-Objekt-Analyse:

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

Nun hat die JSON annehmend bereits zu einem Object Parsen:

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

Sie können Schleife über data.employees die "Wörterbuch" zu bauen (Object):

var employees = {}; 

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

Dann gegeben employeeId:

var employee = employees[employeeId]; 
0

So etwas können Sie ein Wörterbuch in einer Zeile erstellen, und den Schlüssel und Wert für die Angabe, oder zumindest den Schlüssel, wenn der Wert das gesamte Objekt wird.

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

Beispiel Nutzung:

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