2013-07-05 8 views
6

W moim kodzie JS, muszę przekonwertować odpowiedź JSON z serwera na słownik, aby uzyskać do nich dostęp za pomocą nazw kluczy. Oto sytuacja:JSON do słownika w JavaScript?

powiedzieć, to jest odpowiedź JSON z mojego serwera:

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

Teraz to, co jest mi potrzebne do stworzenia słownika zmienną takie, że klucz jest identyfikator, a wartość jest (say), aby uzyskać do nich dostęp do zmiennej .id lub zmiennej [id_value] (z pętli).

Jak można to osiągnąć? Twoja pomoc jest bardzo ceniona.

Dzięki Vivek Ragunathan

Odpowiedz

11

należy zauważyć, że to nie jest ważne JSON: trzeba użyć podwójnego - cytaty, nie pojedyncze cytaty.

Zakładając to naprawić i że JSON została już pobrana na ciąg znaków o zmiennej jsonResult, trzeba przeanalizować, że aby dostać się do obiektu przy użyciu JSON.parse():

var result = JSON.parse(jsonResult); 

można zbudować słownika stamtąd:

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" 

Mówiłeś „a wartość jest (powiedzmy) Nazwa” - jeśli nie potrzebujemy wartości department następnie w pętli for powyżej powiedzieć employees[ emp.id ] = emp.name; a następnie (oczywiście) employees[56] dałoby ci "Harry'ego" bezpośrednio.

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

1

można napisać funkcji javascript, aby uzyskać pracownika przez ID z listy pracowników:

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

    return null; 
} 

a następnie użyć tej funkcji na odpowiedź dostałeś z serwera po parsowania ciąg JSON z powrotem do obiektu 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

Cóż, zakładając JSON został już przeanalizowany do Object:

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

Można pętli nad data.employees zbudować "słownika" (Object):

var employees = {}; 

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

Następnie, biorąc pod uwagę employeeId:

var employee = employees[employeeId]; 
0

Coś jak to pozwala na tworzenie słownika w jednej linii, i określić klucz i wartość używany, lub przynajmniej klawisz gdy wartość staje się cały obiekt.

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

Przykład użycia:

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