2012-08-04 5 views
2

이것은 정말 간단 할 수도 있지만, 나는 그것을 파악하려고 벽에 머리를 때렸다.키 값을 모르는 경우 JSON 응답에서 키를 검색하려면 어떻게해야합니까?

JSON 응답에서 값을 가져와야하지만 응답에서 반환 된 키는 무작위이므로 직접 참조하여 드릴 할 수는 없습니다. - ID를

var c = { 
     "success": { 
        "7d40ab5352b0471cae5bdefc2e032840": { 
          "__type__" : "user", 
          "__id__" : "7d40ab5352b0471cae5bdefc2e032840" 
        } 

     }, 
     "errors": {} 
     } 

내가 필요로하는 것은 당신이 볼 수있는 임의의 문자열은 다음과 같습니다

는 여기에 내가 다시 받고 있어요 응답입니다. 나는 모든 종류의 일을 시도했고, 내 인생에서 ID를 문자열로 다시 가져 오는 방법을 찾아 낼 수 없습니다. 배열 표기법 c.success[0][0]을 사용하면 아무 효과가 없습니다. 분명히, 나는 쓰레기 표기법을 사용할 수 없다. 왜냐하면 나는 .success 후에 무엇을 놓을 지 모르기 때문이다.

배열의 키를 미리 알 수없는 상황에서 누구라도 알 수 있습니까? 나는 해킹이 아닌 모범 사례로 간주되는 방식으로 이것을하고 싶다.

감사합니다 ... 내가 어떻게 든이 답변을 놓친 경우 다른 방법으로 게시 된 경우, 저를 보내주십시오. 며칠 동안 수색했는데이 답을 찾을 수 없습니다.

답변

2
for (var prop in c.success) { 
    alert(c.success[prop].__id__); // Replace the alert with whatever you want to do with the ID 
    // break; // Uncomment if there can be more than one ID returned and you only want one 
} 

와 키가 __id__ 값과 같은 경우, 당신은 간단하게 수행 할 수 있습니다 Object.keys의 SIME VIDAS의 사용이 더 우아하지만

for (var prop in c.success) { 
    alert(prop); // Replace the alert with whatever you want to do with the ID 
    // break; // Uncomment if there can be more than one ID returned and you only want one 
} 

, 당신을 위의 코드가 필요합니다 이전 버전의 브라우저에서 작동하지 않으면 (예 : 오늘 새로운 표준을 사용할 수있는 몇 가지 추가 코드를 추가합니다. 즉, 위와 동일한 작업을 수행하는 Object.keys의 구현입니다. 이 버전에서는 이미 shim이 기본 제공 버전을 우선적으로 사용합니다.

2

이 :

var obj = c.success[ Object.keys(c.success)[0] ]; 

obj.__type__ // "user" 
obj.__id__ // "7d40ab5352b0471cae5bdefc2e032840" 

라이브 데모 : 당신은 객체의 첫 번째 특성 수 있도록하려면

for (var id in c.success) { 
    var obj = c.success[id]; 
    // do something 
} 

:http://jsfiddle.net/AJaBS/

+0

오, 멋진! 'Object.keys' 실제로. –

+0

우아한,하지만 이전 버전과 호환되지 않습니다 –

+0

거룩한 쓰레기 나중에 빠르다 - 이것은 매력처럼 일했다, 너무 감사합니다! –

0

당신은 간단한 루프를 사용할 수 있습니다 마지막으로 break; 문을 추가 할 수 있습니다.

관련 문제