Проблемы с форматированием JSON для объекта данных в Grafana - PullRequest
0 голосов
/ 07 февраля 2019

Данные не поступают с правильным форматированием JSON, поэтому мне приходится циклически проходить по элементам в массиве, чтобы исправить форматирование, анализировать измененные элементы, и я не могу использовать новый объект (ы), когда все закончено, потому что онобольше не в массиве.Данные поступают следующим образом: data [datapoints: [0..1 ..] target: "up {cluster =" bluehills_c3260_cluster ", component =" atr ", datacenter =" bluehills ", hostname =" ny-153-177 "...}"] Есть ли более простой способ преобразовать это, используя функцию .map или другой метод, чтобы сделать вещи чище и получить желаемый результат?

Я пробовал несколько методов, включая .replace.map и .push.Я также попробовал JSON.stringify, но, похоже, ничего не работает, кроме того, что у меня есть в настоящее время.

onDataReceived(data) {
  var i;
  for (i = 0; i < data.length; i++) {  // Loop through data array
    var txt = data[i].target;  // Create the variable to store the data target
    var j;
    for (j = 0; j <= txt.length; j++) {  // Loop through the data target
      var newObj = txt.slice(2,j);  // Remove "up"
      var filteredObj = newObj  // Change over to JSON format...
      .replace(/=/g,' : ')
      .replace(/,/g,', ')
      .replace(/{/g,'{ ')
      .replace(/cluster/g,'"cluster"')
      .replace(/component/g,'"component"')
      .replace(/datacenter/g,'"datacenter"')
    }
    var dataObj = filteredObj.replace(/_"cluster"/gi,'_cluster');
    var finalObj = JSON.parse(dataObj);
    console.log("finalObj", dataObj);
  }
}

То, что я хочу, - это один массив с правильным форматом JSON для данных (цели), поступающих в.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019
onDataReceived(data){
    this.createCosmo(data);
  }

  createCosmo(data) {

    var arr = $.map(data,function(value){
      return value.target;
    });

    var arr2 = $.map(arr,function(value){
     var newObj = value.slice(2);  // Remove "up"
     var filteredObj = newObj  // Change over to JSON format
         .replace(/=/g,' : ')
         .replace(/,/g,', ')
         .replace(/{/g,'{ ')
         .replace(/cluster/g,'"cluster"')
         .replace(/component/g,'"component"')
         .replace(/datacenter/g,'"datacenter"')
         .replace(/hostname/g,'"hostname"')
         .replace(/instance/g,'"instance"')
         .replace(/job/g,'"job"')
         .replace(/resilience_group/g,'"resilience_group"')
         .replace(/_"cluster"/gi,'_cluster')
         .replace(/-"cluster"/gi,'-cluster');
         var finalObj = JSON.parse(filteredObj);  // Parse the Object into JSON
         return finalObj;
    });

}
0 голосов
/ 07 февраля 2019

Как насчет этого?

const myReg = /([\w\s]+)=\"([^"]*)\"/g
const str = `data [datapoints: [0..1..] target: "up{cluster="bluehills_c3260_cluster",component="atr",datacenter="bluehills",hostname="ny-153-177"...}"]`;
let matches = null;
const resultsJson = {};
while(matches = myReg.exec(str)){
    resultsJson[matches[1]] = matches[2];
}   

{cluster: 'bluehills_c3260_cluster', компонент: 'atr', центр данных: 'bluehills', имя хоста: 'ny-153-177'}

Не уверен, что именно так вы хотите хранить данные, но эту часть будет довольно легко настроить.

...