【问题标题】:Convert Graphite JSON output array to Rickshaw Graph compatible format将 Graphite JSON 输出数组转换为 Rickshaw Graph 兼容格式
【发布时间】:2014-02-18 15:33:00
【问题描述】:

我正在使用 Graphite Render API 将 JSON 格式的数据返回给 node.js,我想将其传递给 Rickshaw 进行绘图。我正在使用 grockets.js 通过 socket.io 将数据传递给客户端。通过使用其中一个示例传递手动数据,我已经成功地使用 socket.io 测试了 Rickshaw。我遇到的问题是 Graphite 返回的 JSON 格式不是 Rickshaw 所期望的,我不确定如何进行转换。

石墨输出如下所示:

[
    {
        "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 }
        ]
    }
]

我说这是一个对象数组对吗?任何帮助或指导将不胜感激!

谢谢!

【问题讨论】:

    标签: javascript json rickshaw


    【解决方案1】:

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

    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

    【讨论】:

    • 感谢马特的及时回复,这正是我所追求的。但是由于某种原因,当我运行它时 myData[0].datapoints.map 显示为未定义......知道为什么会这样吗?我已将 myData 记录到控制台以仔细检查它是否采用我所描述的格式,并且它看起来与您的小提琴相同,这很奇怪。
    • 好的,我认为这是因为它在函数中作为字符串而不是对象传递,所以我无法映射它。我应该能够通过 JSON.parse 之类的方法来解决这个问题吗?
    • @user2576960:是的,JSON.parse 应该这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    相关资源
    最近更新 更多