21

私の 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

4

4 に答える 4

34

これは有効な JSON ではないことに注意してください。単一引用符ではなく、二重引用符を使用する必要があります。

それを修正し、JSON がすでに文字列 variable に取得されていると仮定すると、それを解析してJSON.parse()jsonResultを使用してオブジェクトを取得する必要があります。

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/

于 2013-07-05T20:42:12.117 に答える
3

さて、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];
于 2013-07-05T20:44:19.887 に答える
1

従業員のリストから ID で従業員を取得する JavaScript 関数を作成できます。

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);
}
于 2013-07-05T20:41:45.697 に答える
0

このようなものを使用すると、辞書を 1 行で作成し、使用するキーと値、または少なくとも値がオブジェクト全体になるキーを指定できます。

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
}
于 2014-12-12T05:02:03.063 に答える