2016-01-14 5 views
0

Привет У меня есть данные JSON от Jenkins. Я принести JSON и получить работу объектов, которые выглядят следующим образом:Структура данных Javascript для данных json

{ 
    color: "#FF4136" 
    name: "XXX-tomcat-accept" 
    url: "http://1.1.7.9:8080/job/xxx-tomcat-verify/" 
} 

Для каждого потока заданий есть три задания

  • -verify
  • -accept
  • -доставки

Я пытаюсь создать структуру данных, которая представляет собой массив массивов или массив массивов, в котором первый элемент затем подтвердите, затем примите и затем отправьте (тот же порядок, что и в приведенном выше списке).

Так что-то вроде этого

0[xxx-tomcat-verify,xxx-tomcat-accept,xxx-tomcat-delivery] 
1[xxx-linux-verify,xxx-linux-accept,xxx-linux-delivery] 
2 
3 
...... 

Я просто не могу обернуть мою голову вокруг логики, чтобы собрать данные в приведенной выше структуре. То, что я пытаюсь сделать, - это построить панель управления легким весом для Дженкинса, используя d3. Следующий код строит задания и называет их. Просто нужно получить их в правильном порядке.

код у меня есть, таким образом, является

d3.json("data.json", function(error, data) { 

    job.forEach(function(d){ 

     //green balls ! 
     if (d.color === "blue") { 
      d.color = "#2ECC40"; 
     } else if(d.color === "notbuilt"){ 
      d.color = "#AAAAAA"; 

     } else if(d.color === "aborted"){ 
      d.color = "#0074D9"; 
     } else if(d.color === "red"){ 
      d.color = "#FF4136" 

     } 


     var svgContainer = d3.select("body").append("svg") 
          .attr("width", 460) 
          .attr("height", 110); 

     var rectangle = svgContainer.append("rect") 
          .attr("x", 5) 
          .attr("y", 5) 
          .attr("width", 450) 
          .attr("height", 100) 
          .attr("text", d.name) 
          .attr("rx", 10) 
          .attr("ry", 10) 
          .attr("xlink:href", d.url) 
          .attr("fill", d.color); 

     var text = svgContainer.selectAll("text") 
         .data(rectangle) 
         .enter() 
         .append("text"); 

     var textLabels = text 
       .attr("x", 20) 
       .attr("y", 60) 
       .text(d.name) 
       .attr("font-family", "Avro") 
       .attr("font-size", "30px") 
       .attr("fill", "#2f2f2f"); 



     }); 

}); 
+0

У меня трудно понять ваш вопрос, не могли бы вы уточнить? –

+0

, поэтому я возвращаю данные в массив объектов, и я пытаюсь сортировать их в массив или массивы на основе имени, с тремя членами массива в порядке, указанном выше. –

+0

Можете ли вы предоставить больший набор данных для выборки? –

ответ

1

Вы можете использовать d3.nest().

https://jsfiddle.net/ermineia/jz293y70/1/

var jobs = [{ 
    color: "#FF4136", 
    name: "XXX-tomcat-verify", 
    url: "http://1.1.7.9:8080/job/xxx-tomcat-verify/" 
}, 
{ 
    color: "#FF4136", 
    name: "XXX-tomcat-accept", 
    url: "http://1.1.7.9:8080/job/xxx-tomcat-accept/" 
}, 
{ 
    color: "#FF4136", 
    name: "XXX-tomcat-delivery", 
    url: "http://1.1.7.9:8080/job/xxx-tomcat-delivery/" 
}, 
{ 
    color: "#FF4136", 
    name: "XXX-linux-verify", 
    url: "http://1.1.7.9:8080/job/xxx-tomcat-verify/" 
}, 
{ 
    color: "#FF4136", 
    name: "XXX-linux-accept", 
    url: "http://1.1.7.9:8080/job/xxx-tomcat-accept/" 
}, 
{ 
    color: "#FF4136", 
    name: "XXX-linux-delivery", 
    url: "http://1.1.7.9:8080/job/xxx-tomcat-delivery/" 
}]; 

console.log(jobs); 
var formatted_map = d3.nest().key(function(d) { return d.name.substr(0, d.name.lastIndexOf('-')); }).map(jobs); 
console.log(formatted_map); 
console.log(JSON.stringify(formatted_map)) 
var formatted_array = d3.nest().key(function(d) { return d.name.substr(0, d.name.lastIndexOf('-')); }).entries(jobs); 
console.log(formatted_array); 
console.log(JSON.stringify(formatted_array)) 

Записывает:

[Object, Object, Object, Object, Object, Object] 
(index):78 Object {XXX-tomcat: Array[3], XXX-linux: Array[3]} 
(index):79 {"XXX-tomcat":[{"color":"#FF4136","name":"XXX-tomcat-verify","url":"http://1.1.7.9:8080/job/xxx-tomcat-verify/"},{"color":"#FF4136","name":"XXX-tomcat-accept","url":"http://1.1.7.9:8080/job/xxx-tomcat-accept/"},{"color":"#FF4136","name":"XXX-tomcat-delivery","url":"http://1.1.7.9:8080/job/xxx-tomcat-delivery/"}],"XXX-linux":[{"color":"#FF4136","name":"XXX-linux-verify","url":"http://1.1.7.9:8080/job/xxx-tomcat-verify/"},{"color":"#FF4136","name":"XXX-linux-accept","url":"http://1.1.7.9:8080/job/xxx-tomcat-accept/"},{"color":"#FF4136","name":"XXX-linux-delivery","url":"http://1.1.7.9:8080/job/xxx-tomcat-delivery/"}]} 
(index):81 [Object, Object] 
(index):82 [{"key":"XXX-tomcat","values":[{"color":"#FF4136","name":"XXX-tomcat-verify","url":"http://1.1.7.9:8080/job/xxx-tomcat-verify/"},{"color":"#FF4136","name":"XXX-tomcat-accept","url":"http://1.1.7.9:8080/job/xxx-tomcat-accept/"},{"color":"#FF4136","name":"XXX-tomcat-delivery","url":"http://1.1.7.9:8080/job/xxx-tomcat-delivery/"}]},{"key":"XXX-linux","values":[{"color":"#FF4136","name":"XXX-linux-verify","url":"http://1.1.7.9:8080/job/xxx-tomcat-verify/"},{"color":"#FF4136","name":"XXX-linux-accept","url":"http://1.1.7.9:8080/job/xxx-tomcat-accept/"},{"color":"#FF4136","name":"XXX-linux-delivery","url":"http://1.1.7.9:8080/job/xxx-tomcat-delivery/"}]}] 
Смежные вопросы