Javascript:在保持键值的同时展平嵌套的JSON数组

时间:2014-09-11 12:33:23

标签: javascript

我有以下JSON数组:

[{
     "eurusd": {
         "at": 1410438338,
         "ticker": {
             "buy": "1.123",
             "sell": "1.123",
             "low": "1.123",
             "high": "1.123",
             "last": "1.123",
             "vol": "1.123",
             "change": "1.123",
             "change_trend": "up"
         }
     },
     "eurgbp": {
         "at": 1410438338,
         "ticker": {
             "buy": "1.123",
             "sell": "1.123",
             "low": "1.123",
             "high": "1.123",
             "last": "1.123",
             "vol": "1.123",
             "change": "1.123",
             "change_trend": "down"
         }
     }
 }]

需要以下列格式提供:

[{
    "market": "eurusd",
    "currency": "usd",
    "volume": "1.123",
    "change": "1.123",
    "last": "1.123",
    "high": "1.123",
    "low": "1.123"
}, {
    "market": "eurgbp",
    "currency": "gbp",
    "volume": "1.123",
    "change": "1.123",
    "last": "1.123",
    "high": "1.123",
    "low": "1.123"
}]

我知道扁平化的方法,但有一件重要的事情我无法开展工作:

1)货币不是原始数组的一部分。我需要将其从密钥名称中分割出来

到目前为止,我能够完全展平原始阵列,但我没有运气遗漏某些值(例如买/卖)以及将“货币”值添加到新阵列。

1 个答案:

答案 0 :(得分:0)

看起来你并没有太多想要扁平化这个对象,只需提取ticker值并将市场信息添加到各个项目中。为此,我认为你需要一种临时方法:

var items = [],
    cur,
    ticker,
    item;
for (var cur in data[0]) {
    ticker = data[0][cur].ticker;
    item = {};
    ["change", "last", "high", "low"].forEach(function (key) {
        item[key] = ticker[key];
    });
    item.volume = ticker.vol;
    item.market = cur;
    item.currency = cur.substring(3);
    items.push(item);
}

Working jsfiddle