Javascript:在保持一个键值的同时,用来压平嵌套的JSON数组

Javascript: flatten nested JSON array with while keeping a key value

本文关键字:数组 JSON 嵌套 键值 一个 Javascript      更新时间:2023-09-26

我有以下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) 货币不是原始数组的一部分。我需要将其从密钥名称中分离出来

到目前为止,我能够完全压平原始数组,但我没有运气去掉某些值(例如买入/卖出),并将"货币"值添加到新数组中。

与其说您不想太多地压平这个对象,不如说您只想提取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);
}

工作jsfiddle