2013-07-05 46 views
6

在我的JS代碼中,我需要將JSON響應從服務器轉換爲字典,以便我可以通過鍵名訪問它們。這裏的情況是:JSON到JavaScript字典?

說,這是從我的服務器JSON響應:

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

現在我需要的是建立一個字典變量使得關鍵是id和值是(說)名稱,以便我可以訪問他們variable.id或變量[id_value](從循環)。

這是如何實現的?高度讚賞你的幫助。

感謝 維韋克Ragunathan

回答

11

請注意,這是無效的JSON:您必須使用雙 - 行情,而不是單引號。

假設你解決這個問題,那JSON已經檢索到字符串變量jsonResult,你需要分析,使用JSON.parse()獲取對象:

var result = JSON.parse(jsonResult); 

您可以構建一個字典從那裏:

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" 

你說:「和值是(說)的名字」 - 如果你不需要department值,那麼在for循環上面說employees[ emp.id ] = emp.name;,然後(顯然)employees[56]會直接給你「哈利」。

演示:http://jsfiddle.net/RnmFn/1/

1

你可以寫一個JavaScript函數,從員工的名單獲得通過ID的僱員:

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

    return null; 
} 

,然後使用這個功能你從服務器得到的迴應在將JSON字符串解析回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

那麼,假設JSON已經被解析到一個Object

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

您可以遍歷data.employees打造的 「字典」(Object):

var employees = {}; 

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

然後,給定employeeId

var employee = employees[employeeId]; 
0

像這樣,可以創建在一行的字典,並指定所使用的鍵和值,或至少其中的值變爲整個對象的關鍵。

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

實例:

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