2014-02-18 61 views
2

我使用Graphite Render API以JSON格式将数据返回到node.js,我想将它传递给Rickshaw进行绘图。我正在使用grockets.js通过socket.io将数据传递给客户端。我通过使用其中一个示例传递手动数据,成功地通过socket.io测试了Rickshaw。我遇到的问题是,Graphite返回的JSON格式不是Rickshaw所期待的,我不知道如何去转换它。将Graphite JSON输出数组转换为Rickshaw Graph兼容格式

石墨输出看起来像这样:

[ 
    { 
     "target": "localhost_localdomain.cpu-0.cpu-idle", 
     "datapoints": [ 
     [99.999698, 1392728820], 
     [100.000898, 1392728880], 
     [99.999968, 1392728940], 
     [99.299848, 1392732360] 
     ] 
    } 
] 

我需要它是这种格式:

[ 
    { 
     "target": "localhost_localdomain.cpu-0.cpu-idle", 
     "datapoints": [ 
     { "x": 99.999698, "y": 1392728820 }, 
     { "x": 100.000898, "y": 1392728880 }, 
     { "x": 99.999968, "y": 1392728940 }, 
     { "x": 99.299848, "y": 1392732360 } 
     ] 
    } 
] 

难道我说得这是一个对象数组?任何帮助或指导将非常感激!

谢谢!

回答

2

鉴于它只是需要转换的数据点,这应该是相当容易:

var myData = [{ 
    "target": "localhost_localdomain.cpu-0.cpu-idle", 
     "datapoints": [ 
     [99.999698, 1392728820], 
     [100.000898, 1392728880], 
     [99.999968, 1392728940], 
     [99.299848, 1392732360] 
    ] 
}]; 

var transformedPoints = myData[0].datapoints.map(function (pt) { 
    return { 
     x: pt[0], 
     y: pt[1] 
    }; 
}); 

myData[0].datapoints = transformedPoints; 

console.log(myData); 

这里有一个fiddle

+0

感谢您的及时回复马特,这正是我之后。然而由于某种原因myData [0] .datapoints.map显示为未定义,当我运行....任何想法,为什么会这样?我已经将myData记录到控制台,仔细检查它是否是我描述的格式,它看起来与您的小提琴相同,这很奇怪。 – user2576960

+1

好,所以我认为这是因为它作为一个字符串而不是一个对象传递给函数,所以我无法映射它。我应该能够通过像JSON.parse这样的解决方案来解决这个问题吗? – user2576960

+0

@ user2576960:是的,'JSON.parse'应该这样做。 –