2014-02-11 4 views
0

eval()을 사용하지 않고 JSON에서 값을 찾는 문자열을 실행해야하는 옵션을보고 싶습니다.eval을 사용하지 않는 옵션

내 JSON은 다음과 같습니다

var caso = { 
    "_id": "C1M3bqsB92i5SPDu", 
    "type": "bpm", 
    "bpm": { 
     "_data": { 
      "_id_bpm": "bpm_solicitud_viaticos" 
     }, 
     "milestones": { 
      "solicitud": { 
       "toma_de_datos": { 
        "nombre": "RAUL MEDINA", 
        "clave": "123", 
        "departamento": "Finanzas", 
        "cantidad": "456" 
       } 
      } 
     } 
    } 
} 

을 이제 I'v 값의 문자열 : 나는이와 그 JSON에서 원하는 값을 받고 있어요

var step = "caso.bpm.milestones.solicitud.toma_de_datos.nombre"; 

:

var thevalue = eval(step); 

어느 것이 eval() 대신에 사용할 수 있습니까? 효율적이고 쉽게 구현할 수 있습니까?

도움을 주셔서 감사합니다. 문자열이 해당 형식에 항상 경우 여기

var pieces = step.split('.'); 
var parent = window; 

while(parent && pieces.length) { 
    parent = parent[pieces.shift()]; 
} 

if(parent && pieces.length === 0) { 
    // parent is now the value 
} 

이 바이올린입니다 이상

+0

당신이 사용할 수 있습니다 : 새로운 기능; –

+0

점으로 구분 된 문자열입니까? – AD7six

+2

경로 함수에서 가져 오기를 시도해보십시오. [Javascript : 문자열을 경로로 전달하여 객체의 깊이 값 가져 오기] (http://stackoverflow.com/questions/8817394/javascript-get-deep-value-from-object-by -passing-path-to-it-string) 또는 [자바 스크립트 개체 속성을 선택하는 가장 좋은 방법은 무엇입니까?] (http://codereview.stackexchange.com/questions/39979/what-is-the -best-to-select-a-javascript-object-property-at-any-depth) – megawac

답변

0
var pieces = step.split('.'), 
    result; 

pieces.shift(); //discards superfluous "caso" 
result = caso[pieces.shift()]; 

while (pieces.length >= 1) { 
    result = result[pieces.shift()]; 
} 
0

, 당신은 그것을 분할하고 반복 할 수 있습니다 : http://jsfiddle.net/9ZjEt/

+0

창 범위가 없을 수 있습니다. 거기도 없을 수도 있습니다 : ( –

+0

나는 OP가 그것을 이해할 것으로 합리적으로 기대합니다. 그래서 사람들을 올바른 방향으로 움직이고, 손을 잡지는 것을 돕는 것입니다. –

관련 문제