2016-09-01 2 views
0

나는이 다음 JSON 형식을 갖습니다JSON을 반복하고 결과를 얻을 각도 사용

[{ 
"-KQVfnf1ZCml7dZ1dZAC": { 
    "content": { 
     "data": "New Order", 
     "type": "text/plain" 
    }, 
    "conversation_id": "990", 
    "is_admin": false, 
    "is_announce": false, 
    "is_deleted": false, 
    "message_id": "9694", 
    "sender": { 
     "name": "Paras", 
     "user_id": "285" 
    }, 
    "sent_at": "1472648381032" 
}, 
"-KQVgEHps9L3l80nmkWb": { 
    "content": { 
     "data": "New Shipment", 
     "type": "text/plain" 
    }, 
    "conversation_id": "990", 
    "is_admin": false, 
    "is_announce": false, 
    "is_deleted": false, 
    "message_id": "9694", 
    "sender": { 
     "name": "Paras", 
     "user_id": "285" 
    }, 
    "sent_at": "1472648431073" 
}, 
"created_at": "1472647272113", 
"$id": "messages", 
"$priority": null 

}] 이제

내가로부터 필요한 데이터의 일부를 검색하는 각도 사용하고 있습니다 JSON 배열

각 코드는 다음과 같습니다

$scope.user_message = []; 
    $scope.user_content = []; 
    angular.forEach($scope.messages, function(value, key){ 
    $scope.user_message.push(value); 
    angular.forEach($scope.user_message, function(value, key){ 
     $scope.user_content.push(value[key]); 
     console.log($scope.user_content); 
    }); 
    }); 

내가 JSON에서 검색 할 데이터는 다음과 같습니다

{ 
"content": { 
    "data": "New Order", 
    "type": "text/plain" 
}, 
"conversation_id": "990", 
"is_admin": false, 
"is_announce": false, 
"is_deleted": false, 
"message_id": "9694", 
"sender": { 
    "name": "Paras", 
    "user_id": "285" 
}, 
"sent_at": "1472648381032" 

}

그래서, 기본적으로 내가 JSON 배열에 이르기까지 모든 것을 원하는 -KQV ...로 시작하는 메시지 ID 키를 제외하고 ...

하지만 항상 키를 반환합니다. : 0 값 : [object Object].

아무도 나를 도와 줄 수 있습니까?

답변

0

Object.keys(object).foreach() 구문을 사용하여 개체의 각 키를 반복하고 개체 이름이 -KQV으로 시작하는지 확인할 수 있습니다. 그렇다면 해당 개체를 사용하십시오. 그러면 원하는 각 배열의 특정 부분을 얻을 수 있습니다. 여기, 나는 그것을 콘솔에 인쇄하고 $scope.user_message 배열로 밀어 넣었습니다.

$scope.user_message = []; 
for (var i=0; i < $scope.messages.length; i++) { 
    Object.keys($scope.messages[i]).forEach(function(key,index) { 
     if (key.substr(0, 4) == '-KQV') { 
      console.log($scope.messages[i][key]); 
      $scope.user_message.push($scope.messages[i][key]); 
     } 
    }); 
} 
+0

감사합니다. Dr.Cool. 그것은 매력처럼 일했습니다. –

0

이 짧은하지만 JSON 배열의 첫 번째 요소는 항상 메시지가 포함되어 있다고 가정합니다 : 우리가 확신 ('created_at'메시지하지 않은 키에서

//var j = JSON.parse(...) 
for (key in j[0]) { 
    if (j[0].hasOwnProperty(key) && (key != "created_at") && (key != "$id") && (key != "$priority")) { 
    console.log(j[0][key]); 
    } 
} 

그것은 또한 블랙리스트를, 등)를 사용하는 대신 특정 문자열 ('-Kv')로 시작하는 문자열을 허용 목록에 추가하는 대신 최종적으로 변경할 수 있습니다.

+0

공유 주셔서 감사합니다. 이 스 니펫은 상황을 염두에두면 편리 할 것입니다. 지금은 닥터 쿨 (Dr. Cool)의 코드로 간다. 아직도 당신에게 Upvote. –

0

당신이 무엇을하고 있는지 확실히 알지 못한다면 더 많은 샘플 메시지로 메시지 배열을 확장하고 예상되는 출력을 제공 할 수 있다면 좋을 것입니다. 코드의이 버전 (그것은 'KQV'에 대한 점검이 없습니다) $의 scope.user_content에 각 메시지의 모든 개체를 숨겨 놓은 것

$scope.user_message = []; 
    $scope.user_content = []; 
    angular.forEach($scope.messages, function(value, key){ 
    $scope.user_message.push(value); 
    angular.forEach(value, function(value1, key1){ 
     if (value1 === null || typeof value1 !== 'object') return; 
     $scope.user_content.push(value1); 

    }); 
    }); 
console.log($scope.user_content); 

바이올린 : http://jsfiddle.net/b2gy2yr1/

나는 또한 찾고 추천 lodash에 추가하면 작업이 훨씬 쉬워집니다. https://lodash.com/docs/4.15.0

+0

도움을 주셔서 감사합니다. 가까운 시일 내에 조언을 받고 로다시를 시험해 봅니다. –

관련 문제