2013-07-05 2 views
6

JS 코드에서 JSON 응답을 서버에서 사전으로 변환해야 키 이름으로 액세스 할 수 있습니다. 여기에 상황 : (내가 키가 ID가되도록 사전 변수를 만드는 것입니다 필요한 지금JSON을 JavaScript로 번역 하시겠습니까?

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

와 값은 다음과 같습니다

말이 내 서버에서 JSON 응답입니다 말하자면 name 변수에 접근 할 수 있도록 name 또는 변수 [id_value]를 사용할 수 있습니다.

어떻게 달성 할 수 있습니까? 귀하의 도움은 높이 평가됩니다.

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

    return null; 
} 

한 다음 서버에서받은 응답에이 기능을 사용

감사 비벡 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" 

당신은 말했다 "와 값은 (예를 들어) 이름입니다"- 루프의 위 (명백하게) 다음 employees[ emp.id ] = emp.name; 말을하고 당신이 다음 department 값을 필요로하지 않는 경우 employees[56]는 "해리"를 직접 제공합니다.

데모 : http://jsfiddle.net/RnmFn/1/

1

당신은 직원의 목록에서 ID로 직원을 얻을 수있는 자바 스크립트 함수를 작성할 수 당신은 두 번 사용해야합니다 : 그 유효 JSON이 아니라고

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)의 "사전"를 구축 할 수 있습니다

예 : employeeId : 이 같은 47,
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 
} 
관련 문제