JSON转换为JavaScript中的字典

JSON to dictionary in JavaScript?

本文关键字:字典 JavaScript 转换 JSON      更新时间:2023-09-26

在我的JS代码中,我需要将服务器的JSON响应转换为字典,这样我就可以通过关键字名称访问它们。情况如下:

比方说,这是来自我的服务器的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或variable[id_value](从循环中)。

如何做到这一点?非常感谢你的帮助。

谢谢Vivek Ragunathan

请注意,这不是有效的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]会直接给你"Harry"。

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

好吧,假设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];

您可以编写一个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);
}

类似的操作允许您在一行中创建一个字典,并指定所使用的键和值,或者至少指定值成为整个对象的键。

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
}