2017-02-14 4 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" 
      } 

Я не знаю, как сделать это в JavaScript изначально, или если есть способ в 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

Вы забыли выбрать "hits"?

Попробуйте следующее:

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

Я получаю эту ошибку, когда я пытаюсь это ... 'TypeError: response.hits.map не является функцией – user2061886

+0

Что такое объект ответа? Вы этого не говорили. Я подозреваю, что вы должны выбрать из него данные json. Или вы дали неверный формат ответа, а «хиты» - это не массив. –

+0

извините ... опечатка с моей стороны .... снова ... была здесь днем ​​... но это сработало, спасибо огромное! – user2061886