2017-02-14 3 views
0

루트 수준으로 중첩 된 객체를 가져 :자바 스크립트는 내가 다음과 같습니다 JSON 객체를 가지고

{ 
    "total": 298, 
    "max_score": 5.2472496, 
    "hits": [ 
    { 
     "_index": "kafkajmx2", 
     "_type": "logs", 
     "_id": "AVo-VsUdponm9zQGYYS5", 
     "_score": 5.2472496, 
     "_source": { 
     "metric_value_number": 134, 
     "path": "/home/usrxxx/logstash-5.2.0/bin/jmxconf", 
     "@timestamp": "2017-02-14T20:35:58.266Z", 
     "metric_name": "IsrExpandsPerSec.Count", 
     "@version": "1", 
     "host": "localhost", 
     "metric_type": "ReplicaManager", 
     "metric_path": "node1.kafka.server:type=ReplicaManager,name=IsrExpandsPerSec.Count", 
     "type": null, 
     "metric_node": "node1.kafka.server" 
     } 
    }, 
    { 
     "_index": "kafkajmx2", 
     "_type": "logs", 
     "_id": "AVo-V69Yponm9zQGYYwS", 
     "_score": 5.2472496, 
     "_source": { 
     "metric_value_number": 134, 
     "path": "/home/usrxxx/logstash-5.2.0/bin/jmxconf", 
     "@timestamp": "2017-02-14T20:36:58.216Z", 
     "metric_name": "IsrExpandsPerSec.Count", 
     "@version": "1", 
     "host": "localhost", 
     "metric_type": "ReplicaManager", 
     "metric_path": "node1.kafka.server:type=ReplicaManager,name=IsrExpandsPerSec.Count", 
     "type": null, 
     "metric_node": "node1.kafka.server" 
     } 
    } 
] 
} 

제가하고 싶은 것은이 같은 모습에 루트 레벨로 _source 객체를 가져다 :

{ 
      "metric_value_number": 134, 
      "path": "/home/usrxxx/logstash-5.2.0/bin/jmxconf", 
      "@timestamp": "2017-02-14T20:36:58.216Z", 
      "metric_name": "IsrExpandsPerSec.Count", 
      "@version": "1", 
      "host": "localhost", 
      "metric_type": "ReplicaManager", 
      "metric_path": "node1.kafka.server:type=ReplicaManager,name=IsrExpandsPerSec.Count", 
      "type": null, 
      "metric_node": "aesdp0101.kafka.server" 
      }, 
{ 
      "metric_value_number": 134, 
      "path": "/home/usrxxx/logstash-5.2.0/bin/jmxconf", 
      "@timestamp": "2017-02-14T20:35:58.266Z", 
      "metric_name": "IsrExpandsPerSec.Count", 
      "@version": "1", 
      "host": "localhost", 
      "metric_type": "ReplicaManager", 
      "metric_path": "node1.kafka.server:type=ReplicaManager,name=IsrExpandsPerSec.Count", 
      "type": null, 
      "metric_node": "aesdp0101.kafka.server" 
      } 

나는 기본적으로 자바 스크립트에서이 작업을 수행하는 방법을 잘 모르겠어요하거나이 방법을 수행하는 내가 해봤

뿐만 아니라이 작업을 수행하는 lodash의 방법은 ...있을 경우 만 나는라고 생각한다. _source의이 코드에 영향을 줍니까?

 var metricData = []; 
     for (var i=0; i < response.length; i++) { 

     metricData.push(response[i]._source); 
     console.log("metric data: ", metricData); 

     }; 
+2

을 당신은 귀하의 질문에 아무 곳이나 metricData''배열이 없습니다. – Lee

+0

죄송합니다, 그 포함을 잊어 버렸습니다, 나는'var metricData = []'코드를 가지고 있습니다 ... 편집을했습니다 ... – user2061886

+0

아래의 답변을보십시오. – Lee

답변

2

"히트"를 선택하는 것을 잊었습니까?

는 다음을 시도해보십시오

metricData = response.hits.map(hit => hit["_source"]) 
+0

시도 할 때이 오류가 발생합니다 ... 'TypeError : response.hits.map가 함수가 아닙니다.' – user2061886

+0

응답 개체 란 무엇입니까? 너는 이것을 언급하지 않았다. 나는 당신이 그것으로부터 json 데이터를 선택해야한다고 생각합니다. 아니면 잘못된 형식의 응답을 주었고 "히트"는 배열이 아닙니다. –

+0

미안 ... 내 부분에 오타가 .... 다시 ... 하루를 여기에 따라왔다 ....하지만 효과가 있었고, 너무 고마워! – user2061886